【问题标题】:Managing database changes between a Rails and Java project管理 Rails 和 Java 项目之间的数据库更改
【发布时间】:2008-10-20 13:41:36
【问题描述】:
在我开始的一项新工作中,我们有一个 Java 应用程序来处理核心业务逻辑中的大部分繁重工作,我们还有一个 Rails 应用程序当然可以处理该服务器的 Web 界面。两者都访问同一个数据库。
到目前为止,大部分重点都放在 Java 应用程序上,因此,Rails 项目中没有迁移。更新共享数据库的 sql 管理在一个文件中,例如 changes.sql。
您可以想象,这使得开发有些困难。
我最初的想法是结合 Java 项目和 Rails 应用程序的代码库,因为那里存在依赖关系,并在源代码中管理该 SQL 文件。但是,我想我会在这里询问是否有其他人在某种程度上成功地解决了这个问题。
【问题讨论】:
标签:
java
ruby-on-rails
ruby
database
migration
【解决方案1】:
一种方法是使用 rails 迁移工具,为数据库生成 DDL 文件并使用 Hibernate 更新与特定数据库实体相关的 Java 对象。您并没有真正说明如何在 Java 端管理数据库更改或是否使用 ORM,但您当然可以通过一些工作来同步两者。
或者您可以反过来,让 Java 定义控制 Rails 端的更改。
我认为成功做到这一点的关键是选择两个平台之一作为您的“主要数据库建模器”,并开发将该模型迁移到另一个平台的过程。尝试允许两者都进行更改只会让人头疼。
【解决方案2】:
我们有一个类似的项目结构:以 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 来生成存储过程,因此您必须在迁移中执行 %{blah })。
请记住在团队之间保持沟通畅通。我喜欢“上限生产部署:迁移”使更新生产数据库变得非常简单的事实。
【解决方案3】:
谢谢史蒂夫
在 Java 方面,他们使用 Hibernate,但有手动 SQL 更新过程。
我同意,应该是其中之一。我越想,添加另一个应用程序/模块/代码库来管理数据库绝对是错误的想法。
谢谢