web-dev-qa-db-ja.com

コンソールの外でRailsコマンドを実行する

私の大きなアプリケーションでは、Railsコンソールのロードに時間がかかります。コマンドを簡単に1つにする方法はありますか?

自動化もできるようにしたいのですが、echo "query" | Rails consoleは物事を行うのに最適な方法ではありません。

考え?

編集:必要なときにいつでもクエリにpingできる長期実行プロセスについてはどうですか?

35
tekknolagi

コンソールの外でコマンドを実行するには、主に2つの方法があります。

  1. :environmentに依存するRakeタスク
  2. Railsランナー(以前のスクリプト/ランナー)、例:

    $ Rails runner "query"
    

Railsガイド: http://guides.rubyonrails.org/command_line.html

ところで:これらの方法はどちらも、コンソールが起動するのと同じ時間かかりますが、非インタラクティブなタスクには役立ちます。

54
Tim Peters

パイプするだけです:

echo 'puts Article.count' | bundle exec Rails c

Spring のため、最初に質問されたときよりもはるかに速くなります。すぐにはいきませんが、アプリ全体を起動するよりもはるかに高速です。これを高速レーンに使用します。1秒未満で実行する必要があります(必要なコマンドが高速であると想定しています)。

echo 'puts Article.count' | spring Rails c

単一の長期実行プロセスが本当に必要な場合は、POSTに対して何でも実行するコントローラーアクションを作成し、エイリアスの後ろにあるcurlを使用してコマンドを送信することで、簡単に実行できます。もちろん、アクションは完全に安全ではなく、本番環境の近くで実行されないようにトリプルガードする必要がありますが、セットアップは簡単です。

33
mahemoff