在我开始的一项新工作中,我们有一个Java应用程序来处理核心业务逻辑中的大部分繁重工作,我们还有一个Rails应用程序当然可以处理该服务器的Web界面。这两个都访问相同的数据库。
到目前为止,大部分重点都集中在Java应用程序上,因此,Rails项目中没有迁移。用于更新共享数据库的sql在诸如changes.sql。
之类的文件中进行管理你可以想象,这使得开发有点困难。
我最初的想法是将Java项目和Rails应用程序的代码库结合起来,因为那里存在依赖关系,并在源代码中管理该SQL文件。但是,我想我会问这里有没有其他人在某种程度上成功解决了这个问题。
答案 0 :(得分:1)
一种方法是使用rails迁移工具,为数据库生成DDL文件,并使用Hibernate更新与特定数据库实体相关的Java对象。您并没有真正说出如何管理Java端的数据库更改或者您是否使用ORM,但您当然可以通过一些工作来同步这两者。
或者您可以反过来让Java定义控制Rails端的更改。
我认为成功完成此任务的关键是选择两个平台中的一个作为“主数据库建模器”,并开发将该模型迁移到其他平台的过程。试图允许两者的变化只会引起麻烦。
答案 1 :(得分:1)
我们有一个类似的项目结构:将java和rails应用程序作为客户端共享数据库。我主张并且支持使用rails迁移机制来处理数据库更改。它需要一些铁路倡导,有些人愿意帮助,但java团队也在编写自己的迁移。
我们在某些情况下使用存储过程和特定于数据库的列类型,因此我们更改了rails environment.rb以使用sql创建测试数据库。
# Use SQL instead of Active Record's schema dumper when creating the test database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
config.active_record.schema_format = :sql
从好的方面来说,通过迁移来管理sql会让rails测试和设置干净。缺点是某些迁移文件不是那么漂亮(例如,您无法使用迁移DSL生成存储过程,因此您在迁移中执行这些执行%{blah})。
请记住,让团队保持沟通畅通。我喜欢这样的事实:“生产部署:迁移”使得更新生产数据库变得简单。
答案 2 :(得分:0)
谢谢Steve
在Java方面,他们使用的是Hibernate,但是使用了手动SQL更新过程。
我同意,它应该是一个或另一个。我想的越多,添加另一个应用程序/模块/代码库来管理数据库肯定是错误的想法。
由于