132

ruby ファイルfoo.rbを Rails コンソールに渡す方法はありますか。期待される結果は、コンソールがレール環境を起動してファイルを実行した後のものです。

または、コマンドプロンプトからトリガーされて、レール環境でファイルを実行できる他の方法。

4

7 に答える 7

184

実際、最も簡単な方法はloadrails console

 load './path/to/foo.rb'
于 2013-11-02T23:52:24.340 に答える
91

使用できます

bundle exec rails runner "eval(File.read 'your_script.rb')"

アップデート:

私たちが最近よく使っているのは、スクリプト自体から Rails 環境をロードすることです。考慮してくださいdoit.rb

#!/usr/bin/env ruby

require "/path/to/rails_app/config/environment"

# ... do your stuff

これは、スクリプトまたは現在の作業ディレクトリが Rails アプリのディレクトリ内にない場合にも機能します。

于 2012-04-25T14:23:51.463 に答える
79

その間、このソリューションはサポートされています。

rails r PATH_TO_RUBY_FILE

はるかに簡単になりました。

于 2016-06-16T12:10:40.330 に答える
5
script/console --irb=pry < test.rb > test.log

シンプルで、汚れていて、最後にプロセスをブロックしますが、私が望んでいたとおりに仕事をします.

于 2013-02-03T15:29:33.490 に答える
1

前述のこれらのアプローチのうち、スタンドアロン スクリプトが実行されることを期待するようなクリーンで理想的なものはありませんでした (< リダイレクトを介して評価またはパイプされません)。

(Rails 3 の場合)

スクリプトの先頭に挿入します。

#!/usr/bin/env ruby

APP_PATH = File.expand_path(appdir = '/srv/staging/strat/fundmgr/config/application',  __FILE__)
require File.expand_path(appdir + '/../boot',  __FILE__)
require APP_PATH
# set Rails.env here if desired
Rails.application.require_environment!

# your code here...

もちろん、APP_PATH 行に独自の Rails アプリ パスを設定します。

そうすれば、インタラクティブに入力する必要irbがなくなり、シェルプロンプトからscript.rbrails cをテストできます。crontab でスケジュールします。

コマンドライン パラメーターもスムーズにサポートし、コードに到達する前にラッパーのレベルを最小限に抑えます。

CREDIT (Rails 2 の例も示します)

http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-rails.html

于 2014-10-27T15:56:52.053 に答える
0

私が使用しているハックは次のとおりです。

rr() {
    rails_root="$(bundle exec rails runner "puts Rails.root")"
    rp="$(relpath "$1" "$rails_root")"
    bundle exec rails runner "eval(File.read '$rp')"
}
relpath() {python -c "import os.path; print os.path.relpath('$1','${2:-$PWD}')";}

例:

cd ~/rails_project/app/helpers
rr my_script.rb

ここの@moritzの回答に基づいています。File.readの作業ディレクトリが Rails プロジェクトのルートなので変更しました。

Python を使用して Ruby スクリプトを支援するという、これは重大な異端であることは承知しています。しかし、relpathRuby に組み込まれているメソッドが見つかりませんでした。

クレジット: relpath()@MestreLion から取得しました。Bashを使用して、現在のディレクトリを指定して絶対パスを相対パスに変換します

于 2015-06-29T22:14:08.607 に答える