web-dev-qa-db-ja.com

Railsタスク:script / runnerまたはrakeを使用する必要がありますか?

アドホック Railsタスクには、いくつかの実装の選択肢がありますが、主なものは次のとおりです。

script/runner some_useful_thing

そして:

rake some:other_useful_thing

どのオプションを好むべきですか?明確なお気に入りがある場合、他の使用を検討する必要がありますか?そうでない場合、非推奨の警告なしにフレームワークにまだ存在すると仮定しますか?

65
Mike Woodhouse

それらの違いは、script/runner boots Rails一方、Rakeタスクは、タスクを:environment、 このような:

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

ブートRailsは高価なので、回避できる場合はスキップする価値があるかもしれません。

それ以外は、ほぼ同等です。私は両方を使用していますが、最近はscript/runnerさらにスクリプトを個別に実行します。

58
Luke Francl

FWIWがいくつかあるようです スクリプトランナーを使用することからの移行 レーキを支持:

更新(2009年4月25日):定期的なタスクにはスクリプト/ランナーではなく、rakeタスクを使用することをお勧めします。

また、 この投稿ごと のように、定期的なタスクにrakeを使用できます。

次に、真夜中に実稼働データベースでこれを毎晩実行したい場合、次のようなcronjobを作成します。

0 0 * * * cd/var/www/apps/Rails_app/&&/usr/local/bin/rake Rails_ENV = production utils:send_expire_soon_emails

10
esilver

レーキタスクにパラメーターを渡すことは、控えめに言っても、苦痛です。環境変数または直観的でなく、多くの警告がある非常にハック的なパラメーターシステムに頼る必要があります。

タスクでコマンドライン引数を適切に処理する必要がある場合は、スクリプトを作成することをお勧めします。

Luke Franclは、スクリプト/ランナーがRailsを起動することについて言及しています。それは本当だ。ただし、起動したくない場合は、Railsを実行し、スクリプト/ランナーなしでスクリプトをそのまま実行します。あなたへ。

私は小さなタスク(1行または2行)にrakeタスクを使用します。より複雑なものはすべてscript /ディレクトリに入ります。他の開発者がコードが他の場所よりもある場所に存在することを期待すると思うなら、この規則を破ります。

9
Alfred Fazio

コメント2に基づいて修正。それらにカルマを与えてください!

FWIW-Rails 3.0+は、スタンドアロンスクリプトでRailsシステムを初期化する方法を変更します。

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

上記のように、次のこともできます。

Rails runner script/<script name>

または、すべてのコードをRakeタスクに入れますが、Rails 2;からの多くのレガシーコードがあるため、すぐにそのパスをたどりたくありませんでした。

それぞれに長所と短所があります。

9
Ben Walding

私がやったことの1つは、通常のRubyスクリプトを書いてscript/maintenanceディレクトリ。

Railsをロードして、すべてのモデルなどにアクセスするために必要なことは、require '../../config/environment.rb'をファイルの最上部に追加すると、離れます。

5
Orion Edwards

Rails 3.0+では、config/environment.rbにはconfig/application.rbが必要です。これにはconfig/boot.rbが必要です。

したがって、アプリをRails 3で読み込むには、environment.rbのみが必要です。

3
ppires

印象的なスクリプト/ランナーは主に定期的なタスク用でした。例:実行するcronジョブ:

SomeClass.update_from_web('http://www.sourcefordata.gov/')
2
jlc

1回限りのコマンドでは、スクリプト/ランナーで十分です。繰り返されるものについては、rakeタスクは長期的には簡単であり、実行内容を忘れた場合は要約が表示されます。

2
Daniel Morris