我试图让卡皮斯特拉诺与rvm和乘客独立合作。 我曾经有过这样的工作,然后卡皮斯特拉诺突然开始抱怨错过了捆绑命令。 当我删除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环境中缺less一些pathvariables,但仅在从capistrano调用时才有。 所有有问题的命令都可以手动工作。 我不知道从哪里开始寻找。 env rvmsudo_secure_path=1是env rvmsudo_secure_path=1的default_run_options[:env] = {'rvmsudo_secure_path' => 1} ,它阻止rvm错误显示和挂起部署过程。 在部署工作之前就已经存在了。
bundler/capistrano默认设置并不总是最好的select,这就是为什么在rvm-capistranobuild议将这些设置重新设置回使用标准的rubypath (在bundler中称为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]