Rubyファイル、foo.rbをRailsコンソールに渡す方法はありますか。期待される結果は、コンソールがファイルを実行するRails環境を開始した後です。
または、コマンドプロンプトからトリガーされるRails環境でファイルを実行できる他の方法。
それまでの間、このソリューションはサポートされています。
Rails r PATH_TO_Ruby_FILE
より簡単になりました。
実際、最も簡単な方法は、Rails console
内でload
を指定して実行することです
load './path/to/foo.rb'
使用できます
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アプリのディレクトリ内にない場合にも機能します。
script/console --irb=pry < test.rb > test.log
シンプルで汚い、最後にプロセスをブロックしますが、それは私が望んでいたように仕事をします。
レーキタスクの作成を検討してください。
たとえば、レコードを作成したり、移行をサポートしたりする必要があるコードの場合、よく this answer からそのような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
前述のこれらのアプローチのうち、スタンドアロンスクリプトの実行を期待するようなきれいで理想的なものはありませんでした(評価やパイプでリダイレクトされません)が、最終的にこれは私に最適です:
(for 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
またはRails c
そして、たとえば、シェルプロンプトからmyscript.rbをテストできます。 crontabでスケジュールします。
コマンドラインパラメーターもスムーズにサポートし、コードに到達する前にラッパーのレベルを最小化します。
CREDIT(Rails 2の例も示しています)
http://zerowidth.com/2011/03/18/standalone-script-runner-bin-scripts-in-Rails.html
私が使用しているハックは次のとおりです。
_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スクリプトを支援します。しかし、組み込みのrelpath
メソッドが見つかりませんでした。ルビー。
クレジット:relpath()
は@MestreLionから取得しました Bash を使用して、現在のディレクトリを指定して絶対パスを相対パスに変換します