Já tenho um deploy.rb que pode implantar meu aplicativo em meu servidor de produção.
Meu aplicativo contém uma tarefa rake personalizada (um arquivo .rake no diretório lib / tasks).
Eu gostaria de criar uma tarefa de limite que executará remotamente essa tarefa de rake.
ruby
rake
capistrano
Richard Poirier
fonte
fonte
#{rake}
variável do próprio capistrano ? Parece que nem sempre é a melhor opção.Respostas:
Um pouco mais explícito, em seu
\config\deploy.rb
, adicione fora de qualquer tarefa ou namespace:Então,
/rails_root/
você pode executar:fonte
... alguns anos depois ...
Dê uma olhada no plug-in rails do capistrano, você pode ver em https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 ele pode ser parecido com:
fonte
run
funcionará no capistrano até a versão 2. a partir da versão 3 esse é o caminho a percorrer.Versão Genérica Capistrano 3 (execute qualquer tarefa de rake)
Construindo uma versão genérica da resposta de Mirek Rusin:
Exemplo de uso:
cap staging "invoke[db:migrate]"
Observe que
deploy:set_rails_env
requer vem da joia capistrano-railsfonte
rake args[:command]
por,execute :rake, "#{args.command}[#{args.extras.join(",")}]"
pode executar uma tarefa com vários argumentos, como:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Eu prefiro essa abordagem ao que você mencionou porque ela reflete a invocação real do rake. Com essa abordagem, você também pode encadear múltiplas tarefas, o que é frequentemente útil:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Funciona para rake 10.2.0 ou mais recenteEncontrei com o Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
O
RAILS_ENV=production
foi uma pegadinha - Eu não penso nisso em primeiro lugar e não conseguia descobrir por que a tarefa não estava fazendo nada.fonte
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Use invocações de rake no estilo Capistrano
Há uma maneira comum que "simplesmente funciona" com
require 'bundler/capistrano'
outras extensões que modificam o rake. Isso também funcionará com ambientes de pré-produção se você estiver usando vários estágios. A essência? Use config vars, se puder.fonte
top.run
vez de apenasrun
top
método . No caso em que definimosrun
no mesmo namespace,top.run
é obrigatório, caso contrário, ele ainda deve encontrar o nível superior,run
mesmo onde a tarefa tem namespace. Eu perdi alguma coisa? O que aconteceu no seu caso?Use a
capistrano-rake
gemaBasta instalar a gema sem mexer nas receitas personalizadas de capistrano e executar as tarefas de rake desejadas em servidores remotos como este:
Divulgação completa: eu escrevi
fonte
Eu pessoalmente uso na produção um método auxiliar como este:
Isso permite executar a tarefa rake semelhante ao uso do método run (command).
NOTA: É semelhante ao que Duke propôs, mas eu:
fonte
Há uma capa de joia interessante que disponibiliza suas tarefas de rake como tarefas do Capistrano, para que você possa executá-las remotamente.
cape
está bem documentado, mas aqui está uma breve visão geral sobre como configurá-lo.Depois de instalar a gem, basta adicionar isso ao seu
config/deploy.rb
arquivo.Agora, você pode executar todas as suas
rake
tarefas localmente ou remotamentecap
.Como um bônus adicional,
cape
permite que você defina como deseja executar sua tarefa de rake localmente e remotamente (não maisbundle exec rake
), basta adicionar isso ao seuconfig/deploy.rb
arquivo:fonte
fonte
RAILS_ENV=production
paraRAILS_ENV=#{rails_env}
permite que ele funcione no meu servidor de teste também.Aqui está o que coloquei em meu deploy.rb para simplificar a execução de tarefas rake. É um invólucro simples em torno do método run () de capistrano.
Então eu apenas executo qualquer tarefa rake como esta:
fonte
Isso funcionou para mim:
Então simplesmente execute
cap production "invoke[task_name]"
fonte
A maior parte é da resposta acima com um pequeno aprimoramento para executar qualquer tarefa de rake do capistrano
Execute qualquer tarefa de rake de capistrano
fonte
Isso também funciona:
Mais informações: Capistrano Run
fonte
Se você deseja passar vários argumentos, tente isto (com base na resposta de marinosbern):
Então você pode executar uma tarefa como esta:
cap production invoke["task","arg1","arg2"]
fonte
Então, tenho trabalhado nisso. parece funcionar bem. No entanto, você precisa de um formador para realmente tirar vantagem do código.
Se você não quiser usar um formatador, defina o nível de log como modo de depuração. Esses semas para h
Cap Stuff
Este é o formatador que construí para trabalhar com o código acima. É baseado no: textimple integrado ao sshkit, mas não é uma maneira ruim de invocar tarefas personalizadas. Oh, isso não funciona com a versão mais recente do sshkit gem. Eu sei que funciona com 1.7.1. Digo isso porque o branch master mudou os métodos SSHKit :: Command que estão disponíveis.
fonte
Respostas anteriores não me ajudaram e eu achei isso: De http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
para executar sua tarefa, use
Talvez seja útil para alguém
fonte