【问题标题】:Capistrano rbenv not configured to use the proper ruby: 1.9.1 system ruby instead of 2.2.3Capistrano rbenv 未配置为使用正确的 ruby​​:1.9.1 系统 ruby​​ 而不是 2.2.3
【发布时间】: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"' &gt;&gt; ~/.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


【解决方案1】:

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

【讨论】:

  • 命令在服务器上运行,rbenv 安装在服务器上。 capistrano/rbenv 是用于部署到服务器的 gem。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2015-12-30
  • 2018-03-28
  • 2014-04-21
  • 2014-10-18
  • 2023-03-31
  • 2014-12-10
相关资源
最近更新 更多