2014-04-01 49 views
0

我正在嘗試使用application_ruby cookbook來部署我的Rails應用程序。我需要運行一些一次性安裝活動(例如使用rake db:seed來播種數據庫)。這些不應該在隨後的廚師運行中完成。什麼是定義這些任務的正確方法?如何在使用應用程序菜譜時運行設置活動?

回答

0

我解決了這個使用條件執行這樣的方式:

execute "seed database" do 
    cwd node[:release_path] 
    user node[:owner] 
    environment ({'RAILS_ENV' => node[:environment]}) 
    command "bundle exec rake db:seed && touch #{node[:deploy_path]}/db.seeded" 
    not_if { ::File.exists?("#{node[:deploy_path]}/db.seeded") } 
end 

這可以確保一個設置步驟只發生一次。

+0

當你的種子需要一個新的記錄時,你會怎麼做?恩。新的admin_user,國家等?去刪除#{node [:deploy_path]}/db.seeded文件和廚師做飯嗎? – montells

+0

然後,它不再是一次性安裝活動。這可能與IMO以某種方式進行遷移有關。我擔心的是更多的步驟需要一次又一次發生。 – Emil

1
  1. 試用after_party寶石。這種方式運行許多耙任務(你說哪些)像遷移,意味着不執行兩次。然後,你必須記住,如果你想改變你所必須創建一個新的(如遷移)這個rake任務的一個先前執行的東西

  2. 種子的目的,你可以使用seed_fu嘗試。使用限制 技術。我相信,這是種子的正確選擇,但是具有seed_fu語法。

  3. 有些人將種子或數據遷移(我不喜歡)。看看 this question/answer。我相信,這種與移民融合的最糟糕的種子並不是好主意。種子在時間上的變化意味着新的遷徙和種子因環境而變化幾乎是不可能的。

+0

感謝您收到這些提示!我寧願不要觸摸應用程序本身,並將邏輯移至部署配方。 – Emil

相關問題