Unicorn因部署后使用错误的ruby版本而崩溃

时间:2014-11-21 14:18:55

标签: ruby-on-rails ruby rvm capistrano unicorn

由于以下错误,我在服务器中启动应用程序时遇到问题:

/home/blabla/.rvm/gems/ruby-2.1.0/bin/ruby/2.1.0/bin/unicorn", "-E", "beta", "-c", "/var/www/testenvir/releases/20141117005244/config/unicorn.rb", "-D", {16=>#<Kgio::UNIXServer:fd 16>}] (in /var/www/testenvir/releases/20141121053734)

/home/blabla/.rvm/gems/ruby-2.1.0@global/gems/bundler-1.6.3/lib/bundler/definition.rb:390:in `validate_ruby!': Your Ruby version is 2.1.0, but your Gemfile specified 2.0.0 (Bundler::RubyVersionMismatch)

错误是自我毁灭,但我不知道如何解决它,因为我在我的Gemfile脚本中:

ruby '2.0.0'

在我的capistrano部署脚本中:

set :rvm_ruby_string, 'ruby-2.0.0-p353'
set :bundle_dir, "/home/blabla/.rvm/gems/ruby-2.0.0-p353/bin"

在我的服务器中,我将环境变量设置如下:

rvm use ruby-2.0.0-p353

env RAILS_ENV = testenvir bundle exec ruby​​ -v的输出是:

ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]

我可以通过rvm list生成的新终端进行连接来验证:

=* ruby-2.0.0-p353 [ x86_64 ]
   ruby-2.1.0 [ x86_64 ]

最后,我的崩溃命令在试图启动以下命令的眼睛脚本中定义:

bundle exec unicorn -E #{RAILS_ENV} -c #{working_dir}/config/unicorn.rb -D

我确认#{working_directory}和#{RAILS_ENV}是正确的,所以我考虑了硬编码(作为第一步),bundleunicorn的路径,因为它们是一个取自2.1.0而不是2.0.0-p353(我在unicorn.log中得到的错误...),但它没有工作(因另一个错误而崩溃......)

我还检查了$ PATH,$ GEM_HOME,$ GEM_PATH和$ RUBY_VERSION,他们都指向2.0.0-p353版本。事实上,我做了一个printenv,并寻找一个潜在的变量与ruby-2.1.0分配给它,但我找不到!

我检查了我的应用程序的所有文件,无论如何我在某处分配ruby-2.1.0,但我没有找到任何参考。所有这些都设置为ruby-2.0.0-p353。

我的问题是:

我还缺少另一个地方,我应该在哪里指定我想要的红宝石版本?我应该如何在服务器中设置我的ruby版本,而不是我做了什么?

谢谢!

更新

rvm current 
ruby-2.0.0-p353

rvm gemset list
gemsets for ruby-2.0.0-p353 (found in /home/deployer/.rvm/gems/ruby-2.0.0-p353)
=> (default)
   global

1 个答案:

答案 0 :(得分:0)

有点晚但可以帮助遇到同样问题的其他人。我正在使用滚动重启,有什么帮助我是我在config / unicorn.rb文件中的评论

    # If you roll off old code from your app servers (i.e. the way chef, capistrano, 
    # basically anyone does it) you need to make sure Unicorn is not looking for 
    # the Gemfile it was originally started with. It's really important that after 
    # change you stop/start unicorn after first redeploy.
    # After that the "before_exec" block will go in memory and 
    # wait for the next deploy!
    before_exec do |server|
      ENV['BUNDLE_GEMFILE'] = "#{root}/Gemfile"
    end

然后我跑了

/etc/init.d/unicorn-myapp stop

/etc/init.d/unicorn-myapp start

并且独角兽拿起了新的红宝石版本。