Я пытаюсь заставить capistrano работать с 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
Кажется очевидным, что в среде оболочки моего пользователя развертывания отсутствует некоторая переменная пути, но только при вызове из capistrano. Все рассматриваемые команды работают вручную. Я не уверен, с чего начать. В env rvmsudo_secure_path=1
является результатом default_run_options[:env] = {'rvmsudo_secure_path' => 1}
в верхней части staging.rb, что предотвращает отображение ошибки rvm и зависание процесса развертывания. Он присутствовал раньше, когда работала развёртка.
bundler/capistrano
настройки по умолчанию не всегда лучший выбор, поэтому это рекомендуется в rvm-capistrano
чтобы вернуть эти настройки к стандартным рубиновым путям (называется 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]