2016-09-19 224 views
2

我正在rails上開發一個應用程序(rails v4)。在rails應用程序重啓時執行腳本的腳本

我對模型做了一些更改,一旦生產中的應用程序更新並重新啓動,數據需要由腳本修改。

當代碼更新時,有沒有一種簡潔的方式可以對軌道服務器執行腳本(僅一次)。

這就像您在Gemfile中添加一個gem並且服務器在您進行軟件包更新之前不會啓動。

+0

這是遷移的目的。您既可以更改表格的結構,也可以更改表格中的數據。 –

+0

我正在使用mongomapper。 – Kerby82

回答

1

雖然迭戈的答案是正確的,我想指出的另一種方法。基本上有兩種更新數據的方法。第一個是Diego的回答中所描述的遷移。另一個是Rake任務。他們每個人都有幾個論點。

遷移的主要優點是Rake任務不依賴於代碼。因此,當新開發人員加入項目時,您不需要壓縮遷移或從模式文件構建數據庫。

你應該看看Elle Meredith寫的關於data migrations in Rails的文章,然後爲你選擇最好的方法。

+1

因爲我使用mongomapper,閱讀完文章後,rake任務是解決我的問題的更好方法。遷移是在您更改模式時使用的很酷的工具,但不應該用於數據。 – Kerby82

2

聽起來就像你可以將這個一次性腳本放在rails遷移中。在終端運行此命令:

rails generate migration NameOfMyDataMigration 

替換NameOfMyDataMigration與對你有意義的名稱

這將在db/migrate創建一個新的遷移腳本,將是這個樣子:

class NameOfMyDataMigration < ActiveRecord::Migration 
    def change 
    # your data modification logic 
    end 
end 

當您將其部署到生產環境時,您可以執行該操作:

rake db:migrate 

該遷移只能運行一次。

瞭解更多關於Rails遷移這裏:http://guides.rubyonrails.org/v4.2/active_record_migrations.html

+0

這個工作是否也在mongomapper中?如果您使用活動記錄,我知道此解決方案的工作。在我的情況下,我需要分配兩個模型之間的關係,我想確保這是完成的。 – Kerby82

+0

對於mongo,你可以使用這個gem:https://github.com/cheald/mongrations – DiegoSalazar