![](/img/trans.png)
[英]How do I handle old and new migrations in a new app that uses an existing database?
[英]How should i handle migrations with 2 apps and 1 database
在我們的項目中,我們有2個不同的應用程序(如果考慮resque worker,則為3個),它們在遠程db服務器中為同一數據庫使用不同的用戶。
這個想法是,一個應用程序writes stuff on db
另一個應用程序reads stuff from db
。 它們都具有具有相同屬性的相同模型,但是出於安全原因,一個應用程序無論如何都不能在db上進行寫操作。
由於這種設置,我有一些問題:
編輯
我已經進行了一些研究,找到了一些我仍然沒有信心使用的解決方案。
git submodule
或git subtree
編輯2
我為每個應用都有此配置:
# worker and admin, where i need to write
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: my_huge_db_production
pool: 5
username: full_access_user
password: password
socket: /tmp/mysql.sock
# api, where i only need to read
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: my_huge_db_production
pool: 5
username: only_read_access_user
password: password
socket: /tmp/mysql.sock
我最大的問題是如何同步模型和遷移上的所有更改,因此在部署時我可以說:僅在管理應用程序上調用遷移
最好的方法是將數據庫移至主從設置。 在為單個數據庫運行時,將運行遷移。 它將自動反映在其他位置。 您將從Slave db中讀取並在Master上寫入。
sinatra應用程序僅用於公開一個api,因此它不應告訴您模型和表的業務規則。
Resque應用程序僅用於處理繁重的I / O,冗長的請求和其他工作。 它也不應該告訴你什么。
Rails應用程序是您最重要的應用程序,因為它應該處理您所有的業務邏輯,即用戶界面(html / css / javascript)。 它會告訴您api應該如何,因為api基於在其上定義的模型。 我認為那是處理遷移的方法。
如果深入研究,您會發現Rails應用程序是系統的中心點。 =)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.