我有一个使用rails + unicorn + nginx
和capistrano
部署的应用程序。
一切正常,直到昨天我运行了捆绑更新。由于缺少方法,独角兽服务器突然无法启动:generated_attribute_methods
在开发中我可以很好地启动和使用服务器,但在生产中它给了我这个错误
这是从我的使用 rvm(生产)的机器开始的服务器的输出:
I, [2013-05-14T10:05:59.070825 #52560] INFO -- : Refreshing Gem list
/Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/dynamic_matchers.rb:55:in `method_missing': undefined local variable or method `generated_attribute_methods' for #<Class:0x007fe254b1fe98> (NameError)
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/base.rb:405:in `initialize_generated_modules'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/base.rb:397:in `inherited'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/session_store.rb:79:in `<class:SessionStore>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/session_store.rb:53:in `<module:ActiveRecord>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/session_store.rb:3:in `<top (required)>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application/configuration.rb:138:in `session_store'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application.rb:273:in `block in default_middleware_stack'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application.rb:237:in `tap'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application.rb:237:in `default_middleware_stack'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/engine.rb:469:in `app'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application/finisher.rb:31:in `block in <module:Finisher>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `instance_exec'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `run'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/initializable.rb:55:in `block in run_initializers'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `each'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `run_initializers'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/application.rb:136:in `initialize!'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /Users/nicoskaralis/Documents/WayTaxi/webapp/config/environment.rb:5:in `<top (required)>'
from config.ru:4:in `require'
from config.ru:4:in `block in <main>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.4.5/lib/rack/builder.rb:51:in `instance_eval'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.4.5/lib/rack/builder.rb:51:in `initialize'
from config.ru:1:in `new'
from config.ru:1:in `<main>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/lib/unicorn.rb:44:in `eval'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/lib/unicorn.rb:44:in `block in builder'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:722:in `call'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:722:in `build_app!'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:140:in `start'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/gems/unicorn-4.6.2/bin/unicorn:126:in `<top (required)>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/bin/unicorn:19:in `load'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/bin/unicorn:19:in `<main>'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `eval'
from /Users/nicoskaralis/.rvm/gems/ruby-1.9.3-p392/bin/ruby_noexec_wrapper:14:in `<main>'
这是从我的服务器开始的服务器的输出,使用 rbenv(生产):
I, [2013-05-14T10:14:14.599183 #25840] INFO -- : Refreshing Gem list
/home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/dynamic_matchers.rb:55:in `method_missing': undefined local variable or method `generated_attribute_methods' for #<Class:0x0000000204fe50> (NameError)
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/base.rb:405:in `initialize_generated_modules'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/base.rb:397:in `inherited'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:79:in `<class:SessionStore>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:53:in `<module:ActiveRecord>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/session_store.rb:3:in `<top (required)>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application/configuration.rb:138:in `session_store'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:273:in `block in default_middleware_stack'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:237:in `tap'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:237:in `default_middleware_stack'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/engine.rb:469:in `app'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application/finisher.rb:31:in `block in <module:Finisher>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `instance_exec'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:30:in `run'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:55:in `block in run_initializers'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `each'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/initializable.rb:54:in `run_initializers'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/application.rb:136:in `initialize!'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /home/deployer/rails_apps/webapp/releases/20130514130605/config/environment.rb:5:in `<top (required)>'
from config.ru:4:in `require'
from config.ru:4:in `block in <main>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/builder.rb:51:in `instance_eval'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/rack-1.4.5/lib/rack/builder.rb:51:in `initialize'
from config.ru:1:in `new'
from config.ru:1:in `<main>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn.rb:44:in `eval'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn.rb:44:in `block in builder'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:722:in `call'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:722:in `build_app!'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/lib/unicorn/http_server.rb:140:in `start'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.2/bin/unicorn:126:in `<top (required)>'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/bin/unicorn:23:in `load'
from /home/deployer/rails_apps/webapp/shared/bundle/ruby/1.9.1/bin/unicorn:23:in `<main>'
这很奇怪,因为我在 capistrano 中设置了使用 ruby 1.9.3-p392,但是因为是 ubuntu 并且它正在工作,所以我不明白这可能是什么问题
这里有什么问题?我应该怎么办?
编辑
根据需要config.ru
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
run Webapp::Application
编辑 2
我用来启动服务器的命令基本上是这样的:
bundle exec unicorn -p 3000 -c ./config/unicorn.rb -E production
如果我改为
bundle exec unicorn_rails -l 0.0.0.0:3000 -E production
它可以工作,但我没有将我的配置放在服务器中,此外,我读到unicorn_rails
不应该再使用
编辑 3
显然我的问题在里面Webapp::Application.initialize!
puts "before" # => prints
Webapp::Application.initialize!
puts "after" # => don't prints
编辑 4 15/05
我在其他机器和我的服务器(ubuntu 10.04)和我的机器(mac os x)上进行测试,它没有启动服务器,给出了那个错误。但是在我的同事机器(ubuntu 12.04)上它工作正常。
经过一些测试后,我决定清理我的开发代码并从 git 下载最新版本。现在有时它工作正常,有时它给出错误。
会是什么呢?
编辑 5
显然这是因为 new relic + unicorn,评论这行:
if defined? Unicorn
::NewRelic::Agent.manual_start()
::NewRelic::Agent.after_fork(:force_reconnect => true)
end
让一切正常工作