生产中的will_paginate错误NoMethodError(的未定义方法`page’:ActiveRecord :: Relation):

我正在使用will_paginate gem进行类似ajax的“see-more”链接。 它在开发中工作但在生产中失败。

在我的生产日志中,我得到:

NoMethodError (undefined method `page' for []:ActiveRecord::Relation): 

我试过,在生产应用程序的根目录中键入:

 grep will_paginate Gemfile.lock 

得到:

 will_paginate (3.0.4) will_paginate 

cap bundle:安装不会在我的VPS上安装will_paginate失败,但是当我试图明确要求’will_paginate’时,钢铁在开发中工作并且在生产中失败,但这次是整个站点,不仅仅是我使用过的行动will_paginate。 这需要在unicorn.log中触发错误:

 No such file to load will_paginate (LoadError) 

所以我认为will_paginate不会在我的VPS上正确安装他的目录和捆绑安装,但为什么呢?

我试着输入:

 gem list 

那里没有will_paginate。 所以我明确地说,在我当前的应用程序目录中。 gem install will_paginate,但也没有解决问题。

所以我gem卸载will_paginate和“帽子部署”后我再次gem列表再次在那里没有will_paginate

的Gemfile:

 gem 'rails', '3.2.13' gem 'pg' gem 'will_paginate' gem 'sass-rails' gem 'jquery-rails' gem 'jquery-ui-rails' gem 'devise' gem 'uglifier' gem 'coffee-rails' gem "haml" gem 'twitter-bootstrap-rails' gem 'bootstrap-addons-rails' gem 'bootstrap-wysihtml5-rails' gem 'therubyracer' gem 'less-rails' #deploy gem 'unicorn' gem 'capistrano' gem "rmagick" gem "carrierwave" gem 'jquery-fileupload-rails' group :development do gem 'better_errors' gem 'binding_of_caller' gem 'meta_request' end group :development, :test do gem 'rspec-rails' end group :test do gem 'factory_girl_rails' gem 'capybara' gem 'guard-rspec' gem 'growl' gem 'guard-spork' gem 'spork' gem 'rb-fsevent', '~> 0.9' gem "faker" end 

deploy.rb

 require "bundler/capistrano" server ".....", :web, :app, :db, primary: true set :application, "......" set :user, "......." set :deploy_to, "/home/#{user}/apps/#{application}" set :deploy_via, :remote_cache set :use_sudo, false set :shared_children, shared_children + %w{public/uploads} set :scm, "git" set :repository, "git@github.com:........git" set :branch, "master" default_run_options[:pty] = true ssh_options[:forward_agent] = true after "deploy", "deploy:cleanup" # keep only the last 5 releases namespace :deploy do namespace :assets do task :precompile, :roles => :web do from = source.next_revision(current_revision) if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ lib/assets/ app/assets/ | wc -l").to_i > 0 run_locally("rake assets:clean && rake assets:precompile") run_locally "cd public && tar -jcf assets.tar.bz2 assets" top.upload "public/assets.tar.bz2", "#{shared_path}", :via => :scp run "cd #{shared_path} && tar -jxf assets.tar.bz2 && rm assets.tar.bz2" run_locally "rm public/assets.tar.bz2" run_locally("rake assets:clean") else logger.info "Skipping asset precompilation because there were no asset changes" end end task :symlink, roles: :web do run ("rm -rf #{latest_release}/public/assets && mkdir -p #{latest_release}/public && mkdir -p #{shared_path}/assets && ln -s #{shared_path}/assets #{latest_release}/public/assets") end end %w[start stop restart].each do |command| desc "#{command} unicorn server" task command, roles: :app, except: {no_release: true} do run "/etc/init.d/unicorn_#{application} #{command}" end end task :setup_config, roles: :app do sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}" sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}" run "mkdir -p #{shared_path}/config" put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml" puts "Now edit the config files in #{shared_path}." end after "deploy:setup", "deploy:setup_config" task :symlink_config, roles: :app do run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml" end after "deploy:finalize_update", "deploy:symlink_config" desc "Make sure local git is in sync with remote." task :check_revision, roles: :web do unless `git rev-parse HEAD` == `git rev-parse origin/master` puts "WARNING: HEAD is not the same as origin/master" puts "Run `git push` to sync changes." exit end end before "deploy", "deploy:check_revision" #rake seed task desc "Seed the database on already deployed code" task :seed, :only => {:primary => true}, :except => { :no_release => true } do run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:seed" end desc "Seed the database on already deployed code" task :drop, :only => {:primary => true}, :except => { :no_release => true } do run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:drop:all" run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:create:all" run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:migrate" end 

结束

任何人都可以帮我解决这个问题吗?

或者也许有人知道如何将所有文件(will_paginate所需的文件)显式添加到rails app。 所以它将在没有gem will_paginate的情况下工作

我绑到:

 bundle exec gem list 

并在列表中找到will_paginate(3.0.4)。 这意味着它已安装但不适用于我的应用程序?

最后,漫长的不眠之夜结束了。 食谱是:

 gem update --system (on both: server and local machine) 

更新本地ruby版本,在服务器上更新ruby版本,反之亦然

 cap deploy:setup (don't now if it is necessary, but it works for me) cap deploy && cap deploy:restart 

和BAMM,它的工作原理。

问题出在ruby版本中。 他们是不同的本地/远程机器。

你可以找到这个问题,Mislav在这里回答: https : //github.com/mislav/will_paginate/issues/308