Назад | Перейти на главную страницу

Как выполнить команду на сервере с 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 (сменить каталог) в каталог сайта, чтобы запустить команду?

Спасибо!

Вам следует использовать:

execute "cd #{release_path} && script/console production"

С капистрано 3.x

Каждый 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'"

Надеюсь, это поможет.

Правильный способ сделать это - использовать вот так:

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