我正试图让卡皮斯特拉诺与rvm和乘客独立工作。我曾经让它工作过一段时间,然后capistrano突然开始抱怨缺少了bundle命令。当我删除require 'bundler/capistrano'时,它不再抱怨缺少的包(也不再尝试绑定),但是失败了,如下所示:
...
* 2013-07-25 14:29:16 executing `deploy:restart'
* executing "if [[ -f /home/staging/capistrano/shared/tmp/pids/passenger.80.pid ]];\\\n then\\\n cd /home/staging/capistrano/current && rvmsudo passenger stop -p 80;\\\n fi"
servers: ["ccdev.dyndns.org"]
[ccdev.dyndns.org] executing command
** [out :: ccdev.dyndns.org] sh: 1:
** [out :: ccdev.dyndns.org] [[: not found
** [out :: ccdev.dyndns.org]
command finished in 13ms
* executing "cd /home/staging/capistrano/current && rvmsudo passenger start -e staging -p 80 -d"
servers: ["ccdev.dyndns.org"]
[ccdev.dyndns.org] executing command
** [out :: ccdev.dyndns.org] sh: 1:
** [out :: ccdev.dyndns.org] rvmsudo: not found
** [out :: ccdev.dyndns.org]
command finished in 13ms
failed: "env rvmsudo_secure_path=1 sh -c 'cd /home/staging/capistrano/current && rvmsudo passenger start -e staging -p 80 -d'" on ccdev.dyndns.org很明显,我的部署用户的shell环境中缺少一些路径变量,但只有在从capistrano调用时才会丢失。所有涉及的命令都是手动工作的。我不知道该从哪里开始找。env rvmsudo_secure_path=1是位于staging.rb顶部的default_run_options[:env] = {'rvmsudo_secure_path' => 1}的结果,它阻止rvm错误显示和挂起部署过程。它在部署工作之前就已经存在了。
发布于 2013-07-28 01:19:21
bundler/capistrano默认设置并不总是最好的选择,这就是为什么建议在rvm-capistrano将这些设置重置为使用标准的ruby路径 (在邦德勒中称为system,但与系统本身无关)的原因。
我维护示例应用程序https://github.com/mpapis/ad/blob/master/config/deploy.rb --从您那里提取的最小值是:
require "rvm/capistrano"
require "bundler/capistrano"
set :bundle_dir, ''
set :bundle_flags, '--system --quiet'
set :bundle_without, [:development]https://serverfault.com/questions/526316
复制相似问题