5 votes

Js.erb fonctionne localement mais pas en production

J'ai suivi le tutoriel ici http://railsforbeginners.com/chapters/chapter-9-infinite-scroll/ pour un défilement infini. Le code fonctionne bien en local mais quand je le déploie en prod., les liens de pagination (1 2 3 4) s'affichent toujours et le défilement infini ne se déclenche pas. J'ai également essayé d'ajouter ces fichiers dans assets.rb sans succès

Tout d'abord, j'utilise Rails 4, mon application.js ressemble à ceci

//= require jquery2
//= require jquery.turbolinks
//= require jquery_ujs
//= require jquery-ui.min
//= require bootstrap-hover-dropdown.min
//= require bootstrap.min
//= require select2
//= require infinite_scroll
//= require turbolinks

Action du contrôleur

respond_to do |format|
      format.html
      format.js { render "visitors/index" }
end

index.js.erb

$('#my-articles').append('<%= j render @articles %>');
<% if @articles.next_page %>
$('.pagination').replaceWith('<%= j will_paginate @articles %>');
add_tweets();
<% else %>
$(window).off('scroll');
$('.pagination').remove();
<% end %>

function add_tweets(){
  <% @articles.each do |article|%>
    handle_open_modal("<%= article.id %>");
  <%end%>

}

0voto

Stefan Lyew Points 159

Dans votre assets.rb

Essayez cette ligne:

config.assets.precompile += ['Index.js'] 

-> Rails ne peut faire référence aux fichiers que par leur nom de fichier d'actif (non ERB)

aussi par souci de style, vous devriez mettre en minuscules le nom de fichier en: index.js.erb

0voto

Elkhan Mamedov Points 61

Avez-vous vérifié que jQuery se charge? Comme suggéré ci-dessus en allant dans l'onglet développeur Network et en rechargeant.
Vos ressources sont-elles précompilées en environnement de production?
Assurez-vous d'avoir cette config.serve_static_assets = true dans votre config/application.rb
Pour Heroku et Rails 4 voir ici

0voto

Maged Makled Points 324

Voici ce que j'ai fait pour le faire fonctionner en utilisant Cette référence

J'ai supprimé turbolinks et toutes ses références

Ensuite, j'ai ajouté ceci dans le index.html.erb sans avoir à utiliser jQuery $(document).on('ready

if ($('#infinite-scrolling').size() > 0){
        $(window).on('scroll', function(){
          var more_posts_url = $('.pagination .next_page a').attr('href')
          heights = $(document).height() - $(window).height() - 500
            if(more_posts_url && $(window).scrollTop() > heights){
                $('.pagination').html('')
                $.getScript(more_posts_url)
            }
        });
    }

Ensuite, tous les *.js.erb ont commencé à fonctionner.

J'essayais d'éviter de supprimer turbolinks mais j'ai abandonné en essayant de le faire fonctionner avec.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X