由于以下错误,我在服务器中启动应用程序时遇到问题:
/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}是正确的,所以我考虑了硬编码(作为第一步),bundle
和unicorn
的路径,因为它们是一个取自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
答案 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
并且独角兽拿起了新的红宝石版本。