2010-11-16 93 views
2

出於純粹的好奇心,我想知道是否有可能(無疑是)「鉤入」Rails應用程序的環境。例如,假設我想創建一個cron腳本(我不這樣做),它在Rails應用程序上進行某種維護,我想用Ruby編寫它,並使用我已有的所有漂亮代碼例如,User.find向Ruby腳本公開Rails應用程序環境

這是可能的,如果是這樣,如何?

我只是好奇,因爲我覺得我最終會因爲某種原因想要這樣做。

我目前在Rails 3上使用Ruby 1.9.1,以防萬一。

+0

這不就是Rails控制檯的作用嗎?你可以看看它的來源,看看它是如何完成的。 – 2010-11-16 02:07:35

回答

1

這當然是可能的。這裏是一個很好的文字如何做到這一點:How to run a rake task from cron

+0

我不想創建一個cron作業,那只是一個例子。無論如何,所以我認爲這是你如何做到的?通過將代碼集成到rake任務中?似乎很簡單,謝謝! – 2010-11-16 02:19:43

+0

看來,讓這個工作的'技巧',就是將任務指定爲:task:mytask =>:environment,然後就可以訪問環境。 – 2010-11-16 02:21:04

+0

是的,一旦你這樣做,你有機會獲得環境。我一直這樣做(不僅僅是使用cron任務)。 – sosborn 2010-11-16 04:25:56

1

從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'" 
0

耶只需要在你的腳本文件的頂部這些文件

require 'config/boot.rb' 
require 'config/application.rb' 
Rails.application.require_environment! 

現在您可以訪問您的模型

+1

這實際上太複雜了:_require config/environment_就足夠了。 – severin 2012-08-07 11:52:22

1

您可以使用腳本/導軌轉輪由Arsen7建議,或者您可以使用d編寫您自己的腳本,在其中加載應用程序環境的開始部分:

require 'config/environment' 

實際上是您需要的一切。

爲了讓您的腳本在cron作業工作,確保它是可執行文件(CHMOD U + X),它具有正確的家當線(#!開頭的/ usr/bin中/ env的紅寶石或什麼適合你的情況)。

相關問題