【问题标题】:Can't deploy rails4 project with capistrano. rbenv: version `2.0.0' is not installed无法使用 capistrano 部署 rails4 项目。 rbenv:未安装版本“2.0.0”
【发布时间】:2013-08-05 12:31:07
【问题描述】:

我在将 rails4 应用程序部署到 VPS 时出错。 我得到的错误是

rbenv: version `2.0.0' is not installed

但是使用“ruby -v”我得到了

ruby 2.0.0p0 (2013-02-24 revision 39474) [i686-linux]

在我的 gemfile 中有

source 'https://rubygems.org'

ruby '2.0.0'
gem 'rails', '4.0.0'

捆绑安装配方后出现此错误

2013-08-04 23:23:56 executing `bundle:install'
* executing "cd /home/yasinishyn/apps/kaiser/releases/20130804202355 && bundle install --gemfile /home/yasinishyn/apps/kaiser/releases/20130804202355/Gemfile --path /home/yasinishyn/apps/kaiser/shared/bundle --deployment --quiet --without development test"
servers: ["xxx.xxx.xxx.xxx"]
[198.211.125.183] executing command
** [out :: xxx.xxx.xxx.xxx] rbenv: version `2.0.0' is not installed
** [out :: xxx.xxx.xxx.xxx] 
command finished in 355ms
*** [deploy:update_code] rolling back
* executing "rm -rf /home/yasinishyn/apps/kaiser/releases/20130804202355; true"
servers: ["xxx.xxx.xxx.xxx"]
[xxx.xxx.xxx.xxx] executing command
command finished in 342ms

请帮我解决这个问题。

【问题讨论】:

  • 你能把rbenv versions的输出贴出来(在服务器上执行)吗?

标签: ruby-on-rails ruby deployment capistrano


【解决方案1】:

这肯定是 PATH 问题,capistrano 将通过 ssh 发送命令而不打开控制台会话,并且如果您打开 ssh 控制台会话,配置文件的加载方式也不同。这或许可以解释为什么通过 ssh 控制台可以获得正确的 rbenv 环境,但不能通过 capistrano。

以下适用于debian/ubuntu,其他发行版需要调整

我想你在一个配置文件中添加了一些export 指令。也许在 ~/.profile 或 ~/.bashrc 中。

我使用的export 指令如下,但它们在您的配置中可能会有所不同,因此如果在您打开 ssh 控制台时 rbenv 工作正常,那么您可以保留您的 export 命令集。我要详细介绍的技巧就是将它们放置在正确的位置。

我的export 指令是:

echo 'export RBENV_ROOT=/opt/rbenv'
echo 'export PATH=/opt/rbenv/bin:$PATH'
echo 'eval "$(rbenv init -)"'

1-

从您之前包含它们的任何文件中删除它们并将它们放在文件 /etc/profile.d/rbenv 中

2-

编辑文件 /root/.bashrc(或 /home/your_user/.bashrc,如果您使用“root”以外的其他用户访问服务器)并在 [ -z "$PS1" ] && return 行之前添加行 source /etc/profile.d/rbenv

3-

编辑文件/home/deployer/.bashrc(假设您使用“deployer”用户进行capistrano,否则调整路径)并添加行 source /etc/profile.d/rbenv 就在[ -z "$PS1" ] && return这一行之前

4-

通过打开另一个 ssh 控制台会话并尝试 ruby -v 来验证它是否正常工作。那么 capistrano 应该可以正常工作

其他可能性

rbenv 在你手动安装 gems 后需要重新散列,所以在你的服务器上运行rbenv rehash 以确保

【讨论】:

  • 我在那个 VPS 上还有 5 个其他的 rails 应用程序,问题只出现在这个 VPS 上。我想是因为我这里用的是rails4。
  • 我在我的 cap 文件中使用了default_run_options[:pty] = true ssh_options[:forward_agent] = true,之前我已经添加了类似cat ~/.ssh/id_rsa.pub | ssh yasinishyn@xxx.xxx.xxx.xxx 'cat >> ~/.ssh/authorized_keys'ssh-add -K 之后的权限
  • 而且这种方法真的破坏了我的环境((
  • 何对不起,我不知道你有几个安装。希望你早日康复。
  • 在尝试解决这个问题几个小时后,您的解决方案有效。非常感谢!
【解决方案2】:

谢谢本杰明,但这个错误真的很愚蠢))。 Localy 我使用的是 rvm 安装的 ruby​​ 2.0.0-p195。在我的服务器上,我使用 rbenv 安装的 ruby​​ 2.0.0-p0,因为 rbenv 没有 ruby​​ 包 2.0.0-p195。

因此,当我通过 rails-composer 创建新的 rails4 应用程序时,我没有注意到它是使用 .ruby-version 文件创建的,其中的文件是符合 ruby​​ 版本 ruby 2.0.0-p195,所以我只需 * git rm .ruby-version*,一切正常。

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多