有沒有辦法將ruby文件foo.rb傳遞給rails控制檯。預期的結果是在控制檯啓動rails環境後運行文件。將ruby腳本文件傳遞給rails控制檯
或任何其他方式,這將允許我在rails環境中執行文件,從命令提示符觸發。
有沒有辦法將ruby文件foo.rb傳遞給rails控制檯。預期的結果是在控制檯啓動rails環境後運行文件。將ruby腳本文件傳遞給rails控制檯
或任何其他方式,這將允許我在rails環境中執行文件,從命令提示符觸發。
同時,該解決方案提供了支持。
rails r PATH_TO_RUBY_FILE
現在更簡單了。
您可以使用
bundle exec rails runner "eval(File.read 'your_script.rb')"
UPDATE:
我們也一直在使用什麼很多最近是從腳本本身內加載Rails環境。考慮doit.rb
:
#!/usr/bin/env ruby
require "/path/to/rails_app/config/environment"
# ... do your stuff
非常感謝你的工作!我正在使用Sublime Text 2,所以現在我將能夠觸發rails類的構建並直接在IDE中查看輸出:) – 2012-04-25 15:04:22
腳本/ runner「eval(File.read'your_script.rb')」for rails 2.3 :) – valk 2012-11-20 10:30:58
你可以使用類似的模式在控制檯中運行文件:'f = File.new('path/to/file')'用於運行use:'f.rewind; eval f.readlines.join(「\ n」);' – semiomant 2013-06-28 14:08:06
script/console --irb=pry <test.rb> test.log
簡單的,骯髒的,並在結束阻塞進程,但它確實酷似我想要的工作。
前面提到的這些方法裏面,似乎沒有乾淨,喜歡的理想,你會期望一個獨立的腳本來運行(不得到EVAL-編輯或通過<重定向管道),但最後這個完美的作品對我來說:
(爲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
,並且可以從shell提示下測試我script.rb,如前。在crontab中調度它。
它也可以順暢地支持命令行參數,並在獲取代碼之前最小化包裝器的級別。
CREDIT(還示出了軌道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
基於@莫里茨的在這裏回答。我改變了它,因爲File.read
的工作目錄是Rails項目的根目錄。
我知道這是一些嚴重的異端,使用python來幫助一個ruby腳本。但是我找不到在Ruby中內置的relpath
方法。
信用:relpath()
從@MestreLion採取Convert absolute path into relative path given a current directory using Bash
考慮創建一個rake任務。
對於我需要創建記錄或支持遷移的代碼,例如,我經常創建一個類似this answer的耙子任務。例如:
在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
[如何運行在Rails環境Ruby的文件?(HTTP的可能重複: //sackoverflow.com/ com/9757261/how-do-i-run-a-ruby-file-in-a-rails-environment) – 2016-09-07 17:27:45