Capistrano部署因rake run而失败(rails3 + rvm)

时间:2012-06-30 16:40:05

标签: ruby-on-rails ruby rvm capistrano

修改 这里的问题是我在本地机器上使用RVM,在服务器上使用rbenv。如果您正在管理多个ruby安装(或升级您的ruby版本但不想更改系统),则建议您在所有环境中使用RVM或rbenv,这是非常不推荐的! 的 /修改

所以我将从一点历史开始: 我正在将rails2网站升级到rails3。除了Capistrano的部署脚本之外,目前大多数事情都在正常运行。 我目前的设置是:

  • 本地安装RVM(1.14.1)
  • ruby​​-1.9.3-p194(设置为项目的文件夹)
  • Capistrano v2.12.0(从2.6.0升级,但在2.6.0上也不起作用)安装为RVM gem
  • rvm-capistrano(1.2.2),添加到Gemfile中(在线阅读并在SO上阅读后)
  • rbenv(服务器上安装了全局使用的ruby 1.9.3p194)

(现在如果你看到任何没有用的东西,请告诉我)

在部署脚本中没有任何变化,但是当我尝试部署到我的测试服务器(我们称之为 beta )时,我收到此错误:

* executing `deploy:restart'
* executing "cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers"
        servers: ["208.0..."]
        [208.0...] executing command
    *** [err :: 208.0...] rake aborted!
    *** [err :: 208.0...] no such file to load -- bundler/setup
    *** [err :: 208.0...] /home/foo/bar/releases/20120630161947/Rakefile:5
    *** [err :: 208.0...] (See full trace by running task with --trace)
     ** [out :: 208.0...] (in /home/foo/bar/releases/20120630161947)
        command finished in 1183ms
    failed: "sh -c 'cd /home/foo/bar/current && rake RAILS_ENV=beta queue:restart_workers'" on 208.0...

deploy.rb上的相关部分如下所示:

  task :restart do
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} queue:restart_workers"
    run "cd /home/foo/bar/current && rake RAILS_ENV=#{CAP_ENV} db:migrate"
    run "touch #{deploy_to}/current/tmp/restart.txt"
  end   

毋庸置疑,rake RAILS_ENV=beta queue:restart_workers'在服务器上手动运行时效果很好。此外,应用程序已部署(代码是从git复制的,它只是部署的最后一部分失败)。

最后,在我安装rvm-capistrano并添加到Gemfile之前,错误没有改变,所以我甚至不确定它与rvm有关,我只是猜测从在线看。

由于

1 个答案:

答案 0 :(得分:1)

为了正常工作,rbenv必须使用它提供的填充程序覆盖所有与ruby和gem相关的可执行文件。

通常这是通过启动脚本完成的(这就是为什么它在您登录服务器时有效)但Capistrano在没有shell的情况下登录,因此不会运行这些脚本。

您必须将以下内容添加到deploy.rb:

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

并且不要在你的服务器上使用任何相关的rvm,rbenv和rvm真的不喜欢对方

PS:关于这个主题的更多解释:http://henriksjokvist.net/archive/2012/2/deploying-with-rbenv-and-capistrano/