簡體   English   中英

我應該如何處理2個應用程序和1個數據庫的遷移

[英]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上進行寫操作。

由於這種設置,我有一些問題:

  1. 如何確保開發中的兩個應用程序具有相同的遷移? 我應該對一個運行遷移並復制代碼嗎?
  2. 如果我在一個模型上進行了更改,那么同步更改的最佳方法是什么?
  3. 我應該如何處理capistrano遷移數據庫? 我應該忽略它嗎? 還是應該創建一些邏輯來阻止服務器遷移?

編輯

我已經進行了一些研究,找到了一些我仍然沒有信心使用的解決方案。

  1. 創建一個寶石來保存模型數據
    1. 太混亂了
    2. 對於一個小的更改,我需要做很多事情只是為了更新gem
  2. 使用git submodulegit subtree
    1. 不是很簡單
    2. 很高興處理共享模型,但是我不知道該如何處理遷移

編輯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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM