出於純粹的好奇心,我想知道是否有可能(無疑是)「鉤入」Rails應用程序的環境。例如,假設我想創建一個cron腳本(我不這樣做),它在Rails應用程序上進行某種維護,我想用Ruby編寫它,並使用我已有的所有漂亮代碼例如,User.find
等向Ruby腳本公開Rails應用程序環境
這是可能的,如果是這樣,如何?
我只是好奇,因爲我覺得我最終會因爲某種原因想要這樣做。
我目前在Rails 3上使用Ruby 1.9.1,以防萬一。
出於純粹的好奇心,我想知道是否有可能(無疑是)「鉤入」Rails應用程序的環境。例如,假設我想創建一個cron腳本(我不這樣做),它在Rails應用程序上進行某種維護,我想用Ruby編寫它,並使用我已有的所有漂亮代碼例如,User.find
等向Ruby腳本公開Rails應用程序環境
這是可能的,如果是這樣,如何?
我只是好奇,因爲我覺得我最終會因爲某種原因想要這樣做。
我目前在Rails 3上使用Ruby 1.9.1,以防萬一。
這當然是可能的。這裏是一個很好的文字如何做到這一點:How to run a rake task from cron
我不想創建一個cron作業,那只是一個例子。無論如何,所以我認爲這是你如何做到的?通過將代碼集成到rake任務中?似乎很簡單,謝謝! – 2010-11-16 02:19:43
看來,讓這個工作的'技巧',就是將任務指定爲:task:mytask =>:environment,然後就可以訪問環境。 – 2010-11-16 02:21:04
是的,一旦你這樣做,你有機會獲得環境。我一直這樣做(不僅僅是使用cron任務)。 – sosborn 2010-11-16 04:25:56
看看Rails::Railtie class。如果您需要在啓動應用程序時運行代碼,則可以這樣做。 Here's a very simple example.
從Rails的開頭就有./script/runner,正是爲這樣的問題而設計的。
在Rails 3你怎麼稱呼它爲:./script/rails runner "puts User.find(:all).map(&:inspect)"
嘗試./script/runner --help
或./script/rails runner --help
作爲參數傳遞給你提供一個文件名或只是一個代號亞軍。
這往往比準備Rake任務更加有用,因爲你可以只執行一次操作:
ssh [email protected] "cd rails/app && ./script/runner -e production 'puts User.count'"
耶只需要在你的腳本文件的頂部這些文件
require 'config/boot.rb'
require 'config/application.rb'
Rails.application.require_environment!
現在您可以訪問您的模型
這實際上太複雜了:_require config/environment_就足夠了。 – severin 2012-08-07 11:52:22
您可以使用腳本/導軌轉輪由Arsen7建議,或者您可以使用d編寫您自己的腳本,在其中加載應用程序環境的開始部分:
require 'config/environment'
實際上是您需要的一切。
爲了讓您的腳本在cron作業工作,確保它是可執行文件(CHMOD U + X),它具有正確的家當線(#!開頭的/ usr/bin中/ env的紅寶石或什麼適合你的情況)。
這不就是Rails控制檯的作用嗎?你可以看看它的來源,看看它是如何完成的。 – 2010-11-16 02:07:35