【问题标题】:How to run one database engine that is different from other developers sharing the same repo?如何运行一个不同于其他开发人员共享相同存储库的数据库引擎?
【发布时间】:2012-11-08 14:57:34
【问题描述】:

看到How to customize Gemfile per developer?,但它并没有真正做到我想要的,而且它很旧。

用例:我想使用 Postgres,而其他开发人员正在使用 SQLite。

一种解决方案是修改我的 Gemfile 而不提交它,但是如果有人对其进行任何更改,它将不同步。无论如何,它会在一段时间后意外提交。

有没有一种干净的方法可以在我的环境中删除 SQLite gem 并添加 Postgres gem,而不影响其他开发人员的环境和 Gemfile 中的其他 gem?

FWIW,这些更改仅影响开发和测试环境。不是分期或生产。

或者,也许根本不需要更改 Gemfile。是否可以同时安装 gem 并打开 db 配置文件?如果是这样,如何设置每个开发人员的数据库配置?

编辑:不需要更改 Gemfile。只需安装 pg gem 并更改 database.yml 配置文件。

【问题讨论】:

  • 我想知道你为什么要这样做。我不知道 SQLite 和 Postgres 之间是否存在差异(特别是在生成的 SQL 中),但这是有风险的。开发者都应该尽可能地使用相同的环境来消除不一致。
  • SQLite 和 postgres 之间存在差异,即使生成的 SQL 相同,某些东西的行为也会有所不同,只是因为 SQLite 的目标与 Postgres 不同。我认为其中一个区别(不完全确定)是 SQlite 只有一种内部类型:字符串,并且所有内容都被转换为它。
  • 实际上,这是我想在本地运行 Postgres 的原因之一(这就是我们在生产中使用的)。但我不规定其他开发人员做什么。
  • 好吧,我不得不说,你应该把所有东西都改成 Postgres,然后让其他开发人员想知道他们如何使用 SQLite。然后告诉他们应该只使用 Postgres。他们不应该这样做没有任何好的、实际的理由。虽然你可能不想对他们发号施令(我明白了),但最终目标是制作好的软件,如果每个人都在不应该的时候使用不同的技术进行开发,这是不可能的。

标签: ruby-on-rails ruby gem bundler gemfile


【解决方案1】:

针对您的情况,正确的方法是在 gemfile 中包含任何开发人员使用的所有 gem,并为每个开发人员提供一个单独的 database.yml 文件。您可以简单地将 database.yml 保留为非源代码控制,并提供示例配置文件 (database.yml.sample) 供开发人员根据需要复制和修改到他们的环境中。

正如其他人所指出的,在开发人员之间使用不同的数据库并不是很好的做法,因为这些差异可能会在非原始环境中产生意想不到的后果。在需要支持多个数据库的情况下,这可能不是一个坏主意,但在这种情况下,每个开发人员都应该可以访问所有目标数据库系统,以便每个人都可以进行全面的测试。

【讨论】:

    【解决方案2】:

    运行与其他开发人员不同的数据库确实不是一个好主意,尤其是与生产系统相比。这个想法是您的开发环境尽可能地反映部署目标上使用的软件。

    有时需要支持多个数据库,因为您的产品部署在许多不同的数据库上。听起来好像不是这里的情况。

    如果您使用 Postgres,则无法保证您的新代码完全可以与 SQLite 一起使用。

    【讨论】:

      【解决方案3】:

      嗯,不建议这样做,因为开发必须尽可能地模仿生产环境,所以在两个数据库引擎中开发......很棘手。无论如何,您唯一的限制是 database.yml 文件和 db 适配器。正如 PinnyM 所说,您不应该与其他开发人员共享您的 database.yml 文件,但您还应该从 Gemfile 中删除您正在使用的数据库适配器 gem。

      将此添加到您的 Gemfile 中:

      group(:production) do
        gem "sqlite" 
      end
      

      您将拥有一个仅在生产环境中配置的适配器。不要忘记你还需要一个 database.yml 。这就是为什么这样做很棘手。或者只是手动设置数据库设置(database.yml 只是在这一步被解析,但这并不意味着你不能用普通的 ruby​​ 来做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多