管理Rails和Java项目之间的数据库更改

时间:2008-10-20 13:41:36

标签: java ruby-on-rails ruby database migration

在我开始的一项新工作中,我们有一个Java应用程序来处理核心业务逻辑中的大部分繁重工作,我们还有一个Rails应用程序当然可以处理该服务器的Web界面。这两个都访问相同的数据库。

到目前为止,大部分重点都集中在Java应用程序上,因此,Rails项目中没有迁移。用于更新共享数据库的sql在诸如changes.sql。

之类的文件中进行管理

你可以想象,这使得开发有点困难。

我最初的想法是将Java项目和Rails应用程序的代码库结合起来,因为那里存在依赖关系,并在源代码中管理该SQL文件。但是,我想我会问这里有没有其他人在某种程度上成功解决了这个问题。

3 个答案:

答案 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更新过程。

我同意,它应该是一个或另一个。我想的越多,添加另一个应用程序/模块/代码库来管理数据库肯定是错误的想法。

由于