66 votes

J'ai un Rails de la tâche: dois-je utiliser le script/coureur ou un râteau?

Pour les ad hoc sur les Rails de tâches que nous avons un peu de la mise en œuvre des solutions de rechange, dont le principal semble être:

script/runner some_useful_thing

et:

rake some:other_useful_thing

Quelle option dois-je préférer? Si il y a clairement un favori quand, si jamais, je dois envisager d'utiliser les autres? Si jamais, alors, pourquoi voulez-vous qu'il est toujours présent dans le cadre sans la dépréciation des avertissements?

59voto

Luke Francl Points 11707

La différence entre eux est que l' script/runner bottes Rails alors qu'une tâche Rake n'est pas, à moins que vous lui dites en vous rendant la tâche dépendent :environment, comme ceci:

task :some_useful_task => :environment do
  # do some useful task
end

Depuis le démarrage des Rails est cher, il pourrait être intéressant de sauter si vous pouvez l'éviter.

Autre que cela, ils sont à peu près équivalentes. J'utilise les deux, mais dernièrement, j'ai utilisé script/runner de l'exécution d'un script séparément plus.

10voto

esilver Points 7768

FWIW il semble y avoir un mouvement loin de l'aide de script runner en faveur de râteau:

Mise à jour (4/25/2009): je recommande l'utilisation du râteau tâches plutôt script/runner pour les tâches récurrentes.

Aussi, par ce post, vous pouvez utiliser le râteau pour les tâches récurrentes parfaitement:

Si je voulais alors que cette option pour exécuter tous les soirs sur ma base de données de production à minuit, je pourrais écrire un cronjob qui ressemble à quelque chose comme ceci:

0 0 * * * cd /var/www/apps/rails_app/ && /usr/local/bin/râteau RAILS_ENV=production utils:send_expire_soon_emails

10voto

Alfred Fazio Points 573

Passer des paramètres à une tâche rake est une douleur dans le cul, pour dire le moins. Vous soit besoin de recourir à des variables d'environnement ou une très hackish paramètre système qui n'est pas intuitif, et il y a beaucoup de mises en garde.

Si votre tâche doit gérer des arguments de ligne de commande gracieusement alors l'écriture d'un script est le chemin à parcourir.

Luc Francl mentionne script/coureur de démarrage des Rails. C'est vrai. Mais si vous ne voulez pas démarrer rails alors il suffit d'exécuter le script sans script/runner. Donc, la seule différence entre les scripts et le râteau tâches sont leur esthétique. Choisissez tout ce qui se sent le droit de vous.

J'utilise râteau de tâches pour les tâches peu (une ou deux lignes). Rien de plus compliqué va dans le script/ répertoire. Je vais briser cette règle si je pense à d'autres développeurs vont s'attendre à ce que le code de vivre dans un lieu plutôt qu'un autre.

9voto

Ben W Points 2272

Corrigée sur la base de commentaire 2 en bas. Leur donner le karma!

FWIW - Rails 3.0+ change la façon dont vous initialisez le système de Rails dans un script autonome.

require File.dirname(__FILE__) + '/config/environment'

Comme mentionné ci-dessus, vous pouvez aussi le faire:

rails runner script/<script name>

Ou mettre le code dans une tâche Rake, mais j'ai beaucoup de code hérité de Rails 2; donc je n'ai pas envie d'aller dans cette voie immédiatement.

Chacun a ses avantages et ses inconvénients.

5voto

Orion Edwards Points 54939

Une chose que j'ai fait, c'est juste écrire normale scripts ruby et de les mettre dans l' script/maintenance répertoire.

Tout ce que vous devez faire pour charger les rails et avoir accès à toutes vos modèles, etc, est mis require '../../config/environment.rb' en haut de votre fichier, alors vous êtes loin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X