Rails環境でRubyファイルを実行するにはどうすればよいですか?


106

Rails環境のコンテキストでRubyファイルを実行したい。rails runnerはほぼ私がやりたいことを実行しますが、ファイル名と引数を指定するだけです。私は以前にやったことがあるので、これは可能だと確信しています。誰かにこれを行う方法を思い出させることができますか?

回答:



36

単にenvironment.rbスクリプトで要求するだけです。スクリプトがscriptRailsアプリのディレクトリにある場合は、

require File.expand_path('../../config/environment', __FILE__)

RAILS_ENVスクリプトの実行時に環境変数を設定することで、使用する環境(開発/テスト/本番)を制御できます。

RAILS_ENV=production ruby script/test.rb

上記のコードを実行すると、「home / apps / config / environment」が表示されます。同じディレクトリで2つのRailsアプリを実行している場合はどうなりますか?どの環境が必要ですか?私は私のローカルボックスでこの問題に直面しています。親切に提案
Vijay Sali

@VijaySaliスクリプトをapp/scriptディレクトリから実行していると思います。環境ファイルは個々のアプリから取得されます。
iltempo 2014

うん、それは私のために働いたおかげで、私はENV ['RAILS_ENV']も追加しました
Vijay Sali

26

RunnerはRailsのコンテキストで非対話的にRubyコードを実行します。

rails runnerコマンドから:

Usage: runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.

次のように、ランナーをスクリプトのシバン行として使用することもできます。

-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner

Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------

1
「/ Users / me / rails_project / script / rails」を「rails」だけでなく完全に指定した場合にのみ機能するのはなぜですか?TIA
iphone007

他のrailsコマンドでもフルパスをリストする必要がありますか?(つまり、railsサーバー)
colsen 2015

@ iphone007は、スクリプトを実行している場所によって異なる場合があります。
David Moles

7

これは古い質問ですが、私の意見では、rakeタスクを作成すると役立つことがよくあります...実際、それは非常に簡単です。

lib/tasks/example.rake

namespace :example do

desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
  User.create! first_name: "Foo", last_name: "Bar"
end

そしてターミナル実行で:

rake example:create_user

ローカルでこれは開発データベースのコンテキストで実行され、Herokuで実行された場合、運用データベースに接続されている間に実行されます。これは、移行や変更されたテーブルの支援に特に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.