2009-08-19 50 views
1

有沒有簡單的方法讓rails動作加載一個外部命令文件,然後執行它們?從Rails的外部文件執行命令

例如,我試圖編寫一堆rails創建方法來預先填充數據庫中的一堆表。

理想情況下,我想的動作來檢查文件是否存在,如果存在,運行所有的命令,然後刪除該文件,因此它不會再次執行。

因此,外部文件將基本上是這樣的:

MyTable.create :name => "New 1" 
MyTable.create :name => "New 2" 

這是很容易在軌完成?

一些闡述:

的想法是,如果一組特定表需要釋放之後被感動了,你無法通過遷移腳本做到這一點(即你正在初始化從schema.rb文件數據庫),你可以:

  1. 創建一個名爲「update_data.rb」例如
  2. 將其放在admin目錄
  3. 目標在瀏覽器中的一些動作(即文件/ admin/update_data)
  4. 01然後條
  5. 的Rails會在文件中讀取,執行這些命令行由行,然後在完成時
  6. 刪除文件,這樣的行動是不小心再次執行

這是否幫助?這將是一個需要在發佈後執行的一次性操作的文件。如果有更好的方法,我當然都是耳朵!

+0

你好賈斯汀。你能詳細說明你想解決什麼問題嗎?我很好奇,因爲這是一次學習我不知道的東西或者向你提供更好的解決方案的機會。 – Petros 2009-08-19 15:09:01

+0

增加了一些詳細說明 - 感謝您的反饋 – jerhinesmith 2009-08-19 15:19:54

回答

2

另一種選擇是耙。您可以創建的lib /任務的新文件 - 我們會打電話給你bootstrap.rake

namespace :db do 
    desc 'Load an initial set of data' 
    task :bootstrap => :environment do 
    if your_file_exists 
     puts 'Loading data...' 
     this_is_where_the_magic_happens   
    end 
    end 
end 

然後從您可以運行耙分貝控制檯:引導,如果你喜歡的crontab調度。

+0

「:bootstrap =>:environment」代表了什麼?我猜bootstrap是任務的名稱,但'=>:environment'會添加什麼?這只是提出了一個要求:環境的定義? – jerhinesmith 2009-08-19 15:36:29

+0

調用開發模式:rake db:bootstrap生產模式:rake db:bootstrap RAILS_ENV =生產 – 2009-08-19 15:41:17

+0

明白了,這很有道理。 – jerhinesmith 2009-08-19 15:50:03

1

步驟4:

load("update_data.rb") 

我相信這會加載並執行腳本。