我正试图修复一个生产服务器的部署过程,由于使用了错误的ruby正在执行而导致当前失败。与rbenv
的目标红宝石是2.2.3
。但是,服务器上的Ubuntu 14系统似乎默认为ruby 1.9.1
。我希望S.O.上有人也许可以找出问题可能存在的地方。以下是完整的错误:Capistrano rbenv未配置为使用正确的红宝石:1.9.1系统ruby而不是2.2.3
Tasks: TOP => deploy:restart
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as [email protected]: 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:检查以查看是否垫片是在我的路径
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
可以看出,垫片被正确地放置在该路径的前部。
第2步:检查RBENV_VERSION
rbenv shell
rbenv: no shell-specific version configured
所以这里不适用于我的壳,但根据该文件,如果失败了,下一步会因此起执行。
步骤3:检查.ruby-version
当我执行既rbenv local
和rbenv global
,我可以看到,输出是ruby 2.2.3
。另外,在我的目标服务器的rails应用程序中,.ruby-version
的内容包含2.2.3
。所以在这些方面我应该没问题。
第4步:检查~/.rbenv/versions
寻找该目录中发现,我有2.2.3
。
第5步:我执行了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我刚刚执行它,但无济于事。我没有看到任何输出或任何通过执行commnad。我尝试了一次测试部署,但过程仍然失败。 –
我刚问过,因为我曾经有一段时间试图弄清楚为什么它没有正确加载我刚才安装的本地版本,这是因为我没有运行重新散列。它不输出任何东西。 –