2017-07-07 22 views
0

我正试图修复一个生产服务器的部署过程,由于使用了错误的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 localrbenv 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)

正如我应该,建议清除系统红宝石。如果我可以摆脱系统版本,那么也许我可以设置。我不知道这是否被推荐,因为这是一个生产系统。

+0

你有没有做过 - >'rbenv rehash'? –

+0

@MicaelNussbaumer我刚刚执行它,但无济于事。我没有看到任何输出或任何通过执行commnad。我尝试了一次测试部署,但过程仍然失败。 –

+0

我刚问过,因为我曾经有一段时间试图弄清楚为什么它没有正确加载我刚才安装的本地版本,这是因为我没有运行重新散列。它不输出任何东西。 –

回答

0

我不清楚你在本地机器上运行的命令以及你在服务器上运行的命令的问题。但我认为最可能的情况是1)您的本地机器有rbenv但是2)您的服务器没有。在这种情况下,您的服务器不知道.ruby-version文件是什么,并且需要更新其系统Ruby以匹配您用于开发的.ruby-version

+0

这些命令在服务器上运行,rbenv安装在服务器上。 'capistrano/rbenv'是用于部署到服务器的gem。 –

相关问题