【发布时间】:2017-07-07 19:21:35
【问题描述】:
我正在尝试修复由于使用了错误的 ruby 正在执行而导致当前失败的生产服务器的部署过程。带有rbenv 的目标红宝石是2.2.3。但是,服务器上的 Ubuntu 14 系统似乎默认为ruby 1.9.1。我希望有人在 S.O.也许可以查明问题可能出在哪里。以下是完整的错误:
Tasks: TOP => deploy:restart
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as serv-deployer@server: cd '/var/local/fisbot/releases/20170707184851'; RAILS_ENV=production ./slave restart exit status: 1
cd '/var/local/fisbot/releases/20170707184851'; RAILS_ENV=production ./slave restart stdout: Nothing written
cd '/var/local/fisbot/releases/20170707184851'; RAILS_ENV=production ./slave restart stderr: /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /var/local/fisbot/releases/20170707184851/config/boot.rb:3:in `<top (required)>'
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /var/local/fisbot/releases/20170707184851/config/application.rb:1:in `<top (required)>'
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /var/local/fisbot/releases/20170707184851/config/environment.rb:2:in `<top (required)>'
from ./slave:4:in `require_relative'
from ./slave:4:in `<main>'
所以来自 rbenv rbenv 的文档。
第 1 步:检查 shims 是否在我的路径中
printenv | grep PATH
PATH=/home/serv-deployer/.rbenv/shims:/home/serv-deployer/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/puppetlabs/bin
从上面PATH可以看出,shims正确的放在了路径的前面。
第 2 步:检查 RBENV_VERSION
rbenv shell
rbenv: no shell-specific version configured
所以这里并没有应用到我的shell,但是根据文档,如果失败,下一步将继续执行。
第三步:检查.ruby-version
当我同时执行rbenv local 和rbenv global 时,我可以看到输出是ruby 2.2.3。此外,在我的目标服务器上的rails 应用程序中,.ruby-version 的内容包含2.2.3。所以在这些方面我应该没问题。
第 4 步:检查~/.rbenv/versions
查看此目录显示我有2.2.3。
第五步:我已经执行了echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc,Ran,~/.rbenv/bin/rbenv init,打开了一个新窗口。
最后,通过执行gem env,我可以看到我正在使用2.2.3
RubyGems Environment:
- RUBYGEMS VERSION: 2.4.5.1
- RUBY VERSION: 2.2.3 (2015-08-18 patchlevel 173) [x86_64-linux]
- INSTALLATION DIRECTORY: /home/serv-deployer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0
- RUBY EXECUTABLE: /home/serv-deployer/.rbenv/versions/2.2.3/bin/ruby
- EXECUTABLE DIRECTORY: /home/serv-deployer/.rbenv/versions/2.2.3/bin
- SPEC CACHE DIRECTORY: /home/serv-deployer/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /home/serv-deployer/.rbenv/versions/2.2.3/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /home/serv-deployer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0
- /home/serv-deployer/.gem/ruby/2.2.0
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /home/serv-deployer/.rbenv/versions/2.2.3/bin
- /home/serv-deployer/.rbenv/libexec
- /home/serv-deployer/.rbenv/plugins/ruby-build/bin
- /home/serv-deployer/.rbenv/shims
- /home/serv-deployer/.rbenv/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
- /usr/local/games
- /opt/puppetlabs/bin
我在这里遗漏了什么吗?一切都表明我应该运行正确的 ruby 那么为什么命令失败了?
-------------编辑------------
执行 rbenv versions 表明我有两个 ruby 版本
system
2.2.3 (set by /var/local/fisbot/current/.ruby-version)
如我所愿,是否建议清除系统红宝石。如果我可以摆脱系统版本那么也许我可以设置。我不知道这是否被推荐,因为这是一个生产系统。
【问题讨论】:
-
你做了吗 ->
rbenv rehash? -
@MicaelNussbaumer 我现在刚刚执行了它,但无济于事。通过执行命令,我没有看到任何输出或任何东西。我尝试了测试部署,但过程仍然失败。
-
我只是问,因为我曾经有一段时间试图弄清楚为什么它没有正确加载我刚刚正确安装的本地版本,那是因为我没有运行 rehash。它不输出任何东西。
-
1.所有这些命令都在
/var/local/fisbot/releases/20170707184851的服务器上运行? 2. 我在一台远程机器上发生了类似的事情,通过运行eval "$(rbenv init -)"(现在在那台机器上我的.bash_profile)修复了它 -
您是否已将
gem 'capistrano-rbenv'添加到您的Gemfile中? help 很容易理解。
标签: ruby-on-rails ruby capistrano rbenv