Как выполнить команду на сервере с Capistrano?
У меня есть очень простая задача под названием update_feeds:
desc "Update feeds"
task :update_feeds do
run "cd #{release_path}"
run "script/console production"
run "FeedEntry.update_all"
end
Всякий раз, когда я пытаюсь выполнить эту задачу, я получаю следующее сообщение:
[out :: mysite.com] sh: script/console: No such file or directory
Я понял, что это потому, что я не в нужном каталоге, но пытаюсь
run "cd ~/user/mysite.com/current"
вместо
run "cd #{release_path}"
Также не удается. Выполнение точно таких же команд вручную (через ssh) работает отлично. Почему не может Капистрано правильно cd
(изменить каталог) в каталог сайта для запуска команды?
Спасибо!
3 ответа
Каждый run
Команда в основном выполняется в своей собственной оболочке. Так что вам нужно сделать что-то вроде:
run "cd #{release_path} && script/console production"
Однако вы не можете запускать команды в script/console
таким образом, как script/console
для интерактивного использования.
Что вы хотите script/runner
вот так:
run "cd #{release_path} && script/runner -e production 'FeedEntry.update_all'"
Надеюсь, это поможет.
Вы должны использовать:
execute "cd #{release_path} && script/console production"
С капистрано 3.x
Правильный способ сделать это использует внутри так:
within variable_with_the_folder_path do
execute :command, parameter
end
например:
# Bower Cache Clean:
bower_path = fetch(:bower_path)
within bower_path do
execute :node, "#{bower_path_to_bin}", 'cache clean'
end