J'ai déjà un deploy.rb qui peut déployer mon application sur mon serveur de production.
Mon application contient une tâche de rake personnalisée (un fichier .rake dans le répertoire lib / tasks).
Je voudrais créer une tâche de plafond qui exécutera à distance cette tâche de râteau.
ruby
rake
capistrano
Richard Poirier
la source
la source
#{rake}
variable de capistrano ? Il semble que ce n'est pas toujours la meilleure option.Réponses:
Un peu plus explicite, dans votre
\config\deploy.rb
, ajoutez en dehors de toute tâche ou espace de noms:Ensuite, à partir de
/rails_root/
, vous pouvez exécuter:la source
... quelques années plus tard ...
Jetez un œil au plugin rails de capistrano, vous pouvez voir sur https://github.com/capistrano/rails/blob/master/lib/capistrano/tasks/migrations.rake#L5-L14 cela peut ressembler à quelque chose comme:
la source
run
fonctionnera sur capistrano jusqu'à la version 2. à partir de la version 3, c'est la voie à suivre.Version générique de Capistrano 3 (exécuter n'importe quelle tâche de rake)
Construire une version générique de la réponse de Mirek Rusin:
Exemple d'utilisation:
cap staging "invoke[db:migrate]"
Notez que
deploy:set_rails_env
nécessite vient du bijou capistrano-railsla source
rake args[:command]
par,execute :rake, "#{args.command}[#{args.extras.join(",")}]"
vous pouvez exécuter une tâche avec plusieurs arguments comme ceci:cap production invoke["task","arg1","arg2"]
cap staging invoke['task[arg1\,arg2]']
. Je préfère cette approche à celle que vous mentionnez car elle reflète l'invocation réelle de rake. Avec cette approche , vous pouvez également enchaîner des tâches multiples, ce qui est souvent utile:cap staging invoke['task1 task2[arg1] task3[arg2\,arg3]']
. Fonctionne pour rake 10.2.0 ou plus récentJe l'ai trouvé avec Google - http://ananelson.com/said/on/2007/12/30/remote-rake-tasks-with-capistrano/
Le
RAILS_ENV=production
était un Gotcha - Je ne pensais pas au premier abord et ne pouvait pas comprendre pourquoi la tâche ne faisait rien.la source
"cd #{deploy_to}/current && #{rake} <task_name> RAILS_ENV=production"
Utiliser les invocations de râteau de style Capistrano
Il existe une méthode courante qui "fonctionne simplement" avec
require 'bundler/capistrano'
et d'autres extensions qui modifient rake. Cela fonctionnera également avec les environnements de pré-production si vous utilisez plusieurs étapes. L'essentiel? Utilisez des variables de configuration si vous le pouvez.la source
top.run
au lieu de simplementrun
top
méthode . Dans le cas où nous avons définirun
dans le même espace de noms,top.run
est requis, sinon il devrait toujours trouver le niveau supérieurrun
même là où la tâche est espacée de noms. Ai-je manqué quelque chose? Que s'est-il passé dans votre cas?Utilisez la
capistrano-rake
gemmeInstallez simplement la gemme sans jouer avec les recettes de capistrano personnalisées et exécutez les tâches de râteau souhaitées sur des serveurs distants comme ceci:
Divulgation complète: je l'ai écrit
la source
J'utilise personnellement en production une méthode d'aide comme celle-ci:
Cela permet d'exécuter une tâche rake similaire à l'utilisation de la méthode run (command).
REMARQUE: C'est similaire à ce que Duke a proposé, mais je:
la source
Il existe une cape de gemme intéressante qui rend vos tâches de râteau disponibles en tant que tâches Capistrano, afin que vous puissiez les exécuter à distance.
cape
est bien documenté, mais voici un bref aperçu de la façon de configurer i.Après avoir installé le gem, ajoutez-le simplement à votre
config/deploy.rb
fichier.Désormais, vous pouvez exécuter toutes vos
rake
tâches localement ou à distancecap
.En prime,
cape
vous permet de définir la manière dont vous souhaitez exécuter votre tâche de rake localement et à distance (pas plusbundle exec rake
), ajoutez simplement ceci à votreconfig/deploy.rb
fichier:la source
la source
RAILS_ENV=production
en luiRAILS_ENV=#{rails_env}
permet de fonctionner également sur mon serveur de test.Voici ce que j'ai mis dans mon deploy.rb pour simplifier l'exécution des tâches de rake. C'est un simple wrapper autour de la méthode run () de capistrano.
Ensuite, je lance n'importe quelle tâche de râteau comme ceci:
la source
Cela a fonctionné pour moi:
Alors lancez simplement
cap production "invoke[task_name]"
la source
La plupart provient de la réponse ci-dessus avec une amélioration mineure pour exécuter n'importe quelle tâche de rake de capistrano
Exécutez n'importe quelle tâche de râteau depuis capistrano
la source
Cela fonctionne également:
Plus d'informations: Capistrano Run
la source
Si vous voulez pouvoir passer plusieurs arguments, essayez ceci (basé sur la réponse de marinosbern):
Ensuite, vous pouvez exécuter une tâche comme ceci:
cap production invoke["task","arg1","arg2"]
la source
J'ai donc travaillé là-dessus. il semble bien fonctionner. Cependant, vous avez besoin d'un formateur pour vraiment tirer parti du code.
Si vous ne souhaitez pas utiliser de formateur, réglez simplement le niveau de journalisation sur le mode débogage. Ces semas à h
Cap Stuff
C'est le formateur que j'ai construit pour fonctionner avec le code ci-dessus. Il est basé sur: TextSimple intégré au sshkit mais ce n'est pas une mauvaise façon d'appeler des tâches personnalisées. Oh, beaucoup ne fonctionnent pas avec la dernière version de sshkit gem. Je sais que cela fonctionne avec 1.7.1. Je dis cela parce que la branche principale a changé les méthodes SSHKit :: Command qui sont disponibles.
la source
Les réponses précédentes ne m'ont pas aidé et j'ai trouvé ceci: De http://kenglish.co/run-rake-tasks-on-the-server-with-capistrano-3-and-rbenv/
pour exécuter votre tâche, utilisez
Peut-être que ce sera utile pour quelqu'un
la source