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

管理Rails和Java项目之间的数据库更改,java,ruby-on-rails,ruby,database,migration,Java,Ruby On Rails,Ruby,Database,Migration,在我开始的一项新工作中,我们既有一个处理核心业务逻辑中大部分繁重工作的Java应用程序,也有一个Rails应用程序,当然可以处理与该服务器的web接口。它们都访问同一个数据库 # 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 schem

在我开始的一项新工作中,我们既有一个处理核心业务逻辑中大部分繁重工作的Java应用程序,也有一个Rails应用程序,当然可以处理与该服务器的web接口。它们都访问同一个数据库

  # 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
到目前为止,大部分关注点都集中在Java应用程序上,因此,Rails项目中没有迁移。用于更新共享数据库的sql在类似changes.sql的文件中进行管理

正如你所能想象的,这使得开发有点困难


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

一种方法是使用rails迁移工具,为数据库生成DDL文件,并使用Hibernate更新与特定数据库实体相关的Java对象。您并没有真正说明如何在Java端管理数据库更改,或者是否使用ORM,但您当然可以通过一点工作来同步这两个更改

或者,您也可以反过来,让Java定义控制Rails端的更改

我认为成功实现这一点的关键是选择这两个平台中的一个作为“主要数据库建模器”,并开发将该模型迁移到另一个平台的过程。尝试允许两者的更改只会引起麻烦。

谢谢Steve

在Java方面,他们使用Hibernate,但是使用手动SQL更新过程

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


谢谢

我们有一个类似的项目结构:将java和rails应用程序作为客户端共享数据库。我提倡并接受使用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生成存储过程,因此在迁移中有这些execute%{blah})

记住保持团队之间的沟通渠道畅通。我喜欢“cap production deploy:migrations”使更新生产数据库变得非常简单