【问题标题】:Use external gem for Rails models为 Rails 模型使用外部 gem
【发布时间】:2017-05-23 22:05:31
【问题描述】:

我目前正在开发三个 Rails 应用程序,它们将使用相同的数据库和相同的模型。为了使它们保持同步,我想将这些模型移动到一个独立的 gem 中。

我已阅读 RubyGems 指南以创建我自己的 gem,但我不确定应该如何处理某些事情(例如数据库凭据 (database.yml)、模型测试、迁移...)

对提供此行为的现有 gem 的最佳实践或指针有何想法?

【问题讨论】:

  • 抱歉,在您重新提出问题之前,我已经发布了我的答案。当您说“使用相同的数据库”时,您能澄清一下您的意思吗?你的意思是字面意思同一个数据库(例如,单个 Postgresql 实例)。或者,你的意思是同一个数据库结构?它们是非常不同的东西。
  • 同一个数据库,一个 Postgresql 实例 :)
  • 噢噢噢噢!那么为什么不把所有的迁移放到你的一个应用程序中,然后配置另外两个应用程序来连接到那个数据库实例呢?似乎比磨碎宝石要容易得多......

标签: ruby-on-rails activerecord rubygems


【解决方案1】:

迁移进入您的 gem。

您可以通过将其放入 gem 的 engine.rb 文件中(使用 Rails::Engine 时)将它们包含在您的包含应用程序中:

'lib/your_gem/engine.rb'

module YourGem
  class Engine < ::Rails::Engine
    initializer :append_migrations do |app|
      unless app.root.to_s.match root.to_s
        config.paths["db/migrate"].expanded.each do |expanded_path|
          app.config.paths["db/migrate"] << expanded_path
        end
      end
    end
  end
end

您没有使用Rails::Engine(事实上,它会带来一些不必要的开销)。但是,如果您是第一次这样做,这可能是最简单的事情。

schema.rb 将在包含应用程序的db 目录中自动生成,这与运行rake db:migrate 时的情况一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多