Como executar um comando no servidor com o Capistrano?

2

Eu tenho uma tarefa muito simples chamada update_feeds:

desc "Update feeds"
task :update_feeds do
  run "cd #{release_path}"
  run "script/console production"
  run "FeedEntry.update_all"
end

Sempre que tento executar essa tarefa, recebo a seguinte mensagem:

[out :: mysite.com] sh: script/console: No such file or directory

Eu percebi que é porque não estou no diretório certo, mas tentando

run "cd ~/user/mysite.com/current"

em vez de

run "cd #{release_path}"

Também falha. Executar os mesmos comandos manualmente (através do ssh) funciona perfeitamente. Por que não é possível capistrano corretamente cd (alterar diretório) no diretório do site para executar o comando?

Obrigado!

    
por yuval 28.08.2010 / 20:33

3 respostas

6

Cada comando run basicamente é executado dentro de seu próprio ambiente de shell. Então você precisaria fazer algo como:

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

No entanto, você não pode executar comandos em script/console , assim como script/console é para uso interativo .

O que você quer é script/runner , assim:

run "cd #{release_path} && script/runner -e production 'FeedEntry.update_all'"

Espero que ajude.

    
por 29.08.2010 / 06:12
5

Você deve usar:

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

Com o capistrano 3.x

    
por 03.12.2013 / 17:59
1

A maneira correta de fazer isso é usar assim:

within variable_with_the_folder_path do
    execute :command, parameter
end

por exemplo:

    # Bower Cache Clean:
    bower_path = fetch(:bower_path)
    within bower_path do
      execute :node, "#{bower_path_to_bin}", 'cache clean'
    end
    
por 21.10.2014 / 09:50