在我们的项目中,我们有2个不同的应用程序(如果您考虑resque worker,则为3个),它们在远程数据库服务器中为同一个数据库使用不同的用户。
这个想法是一个应用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
我最大的问题是如何同步我的模型和迁移的所有更改,因此当我部署时我可以说:只在管理应用上调用迁移
答案 0 :(得分:0)
最好的方法是将数据库移动到Master Slave设置。 您将在运行单个数据库时运行迁移。它会自动反映在其他地方。 你将从Slave数据库中读取并在Master上进行写作。
答案 1 :(得分:0)
sinatra应用程序只是为了暴露api,所以它不应该告诉你模型和表格的业务规则。
resque应用程序只是处理繁重的i / o,长请求和东西。它也不应该告诉你。
rails应用程序是您最重要的应用程序,因为它应该处理您的所有业务逻辑,用户界面(html / css / javascript)。它会告诉你api应该是怎样的,因为你的api是基于它定义的模型。我认为那是处理迁移的人。
如果你更深入,你会发现rails app是你系统的中心点。 =)