Как выполнить команду на сервере с 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
Другие вопросы по тегам