为两个应用程序之间共享的模型创建Gem

问题描述 投票:2回答:1

我以前从未这样做过,也不知道从哪里开始。我有两个应用程序,一个读取,另一个读取/写入。我被告知我可以在两个应用程序之间共享相同的数据库,并且我应该从读/写应用程序创建我的模型的gem,以便在我的只读应用程序中使用。

这听起来像是一个很好的解决方案,因为这意味着我不必在两个应用程序之间复制我的代码。从哪里开始?我真的很感激在这里做什么的解释和一些指导,如果可能的话,几乎是一个迷你的指导,或者至少在哪里看?

所以做了一些阅读后我可以看到你可以使用Bundler创建一个gem

bundle gem name-of-my-gem

我可以像这样使用宝石,将它放在每个应用程序中

gem "name-of-my-gem", path: "path/to/gem/dir"

我怎么实际告诉它我想把哪些型号放入宝石中呢?

ruby ruby-on-rails-3 rubygems bundler
1个回答
2
投票

你如何构建宝石取决于你,但这是我将如何开始:

name-of-my-gem/
.. lib/
.... name-of-my-gem.rb
.... models/
...... all_of_your_models 

你的模型gem应该有一个.rb文件,可以加载存储在其中的任何模型。如果此文件以gem命名并放置在gem的lib/目录中,则应由bundler自动加载。此文件可能如下所示:

require "models/customer"
require "models/order"
# ...

您也可以在这里做一些更好的事情,比如获取模型目录中的文件列表并加载每个文件,这样您就不必将每个新模型添加到此文件中。由你决定。

每个models/文件看起来与rails应用程序中的模型完全相同:

class Customer < ActiveRecord::Base
  has_many :orders
  # ...
end

您可以在他们当前所在的rails应用程序中复制您想要从app/models/共享的任何模型类,并将它们粘贴到gem中的models/中。然后,你只需要更新每个应用程序中的gem(在每个应用程序中运行bundle update name-of-my-gem),你应该能够从app/models/中取出模型,它应该仍然有效,因为它将从你的gem中加载。

这种方法的一个缺点是,在您进行更改后,rails无法再重新加载模型。更改gem中的模型后,您需要运行bundle update name-of-my-gem,然后重新启动rails服务器。我建议首先在一个应用程序中充实大部分模型的功能,以利用rails代码重新加载,并且当它非常稳定时将其移动到gem中。

你也可以给你的宝石代码重新加载能力,但这变得相当复杂,我从来没有这样做过。

© www.soinside.com 2019 - 2024. All rights reserved.