gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:48 25 4
gpt4 key购买 nike

由于以下错误,我无法在服务器中启动我的应用程序:

/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)

错误是 self 描述的,但我不知道如何修复它,因为我的 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 ]

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

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​​ 版本?我应该如何在服务器中设置我的 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

最佳答案

有点晚了,但可以帮助遇到同样问题的其他人。我正在使用滚动重启,对我有帮助的是我在 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 停止

/etc/init.d/unicorn-myapp 开始

unicorn 选择了新的 ruby​​ 版本。

关于ruby-on-rails - Unicorn 因部署后使用错误的 ruby​​ 版本而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27063436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com