将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
请帮我弄明白。
答案 0 :(得分:6)
谢谢Benjamin,但错误真的很愚蠢))。 Localy我使用由rvm安装的ruby 2.0.0-p195。在我的服务器上我用rickv安装的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 * ,一切正常。< / p>
答案 1 :(得分:4)
这肯定是一个PATH问题,capistrano将在不打开控制台会话的情况下通过ssh发送命令,如果打开ssh控制台会话,则不会以相同的方式加载配置文件。这可以解释为什么通过ssh控制台可以获得正确的rbenv环境,但不能通过capistrano。
以下适用于debian / ubuntu,需要针对其他发行版进行调整
我想你在一个配置文件中添加了一些export
指令。在〜/ .profile或〜/ .bashrc中也许。
我使用的export
指令如下,但它们在您的配置中可能有所不同,因此如果在打开ssh控制台时rbenv正常工作,那么您可以保留{{1命令。我要详细说明的诀窍就是将它们放在正确的位置。
我的export
说明是:
export
1-
从以前包含它们的任何文件中删除它们并将它们放在文件/etc/profile.d/rbenv
中2-
编辑文件/root/.bashrc中(或/home/your_user/.bashrc如果你与其他用户不是“根”访问您的服务器)和echo 'export RBENV_ROOT=/opt/rbenv'
echo 'export PATH=/opt/rbenv/bin:$PATH'
echo 'eval "$(rbenv init -)"'
只是行前添加一行{{1 }}
3 -
编辑文件/home/deployer/.bashrc(假设您使用“deployer”用户为capistrano,否则调整路径)并添加该行
source /etc/profile.d/rbenv
就在[ -z "$PS1" ] && return
4-
通过打开另一个ssh控制台会话并尝试source /etc/profile.d/rbenv
来验证它是否正常工作。然后capistrano应该正常工作
其他可能性
手动安装宝石后需要重新运行rbenv,所以在服务器[ -z "$PS1" ] && return
上运行只是为了确保