我以前从未这样做过,也不确定从哪里开始。我有两个应用程序,一个读取,另一个读取/写入。我被告知我可以在两个应用程序之间共享相同的数据库,并且我应该从读/写应用程序创建我的模型的宝石,以便在我的只读应用程序中使用。
这听起来像是一个很好的解决方案,因为这意味着我不必在两个应用程序之间复制我的代码。从哪里开始?我真的很感激在这里做什么的解释和一些指导,如果可能的话,几乎是一个迷你操作指南,或者至少在哪里看?
所以我做了一些阅读,我可以看到你可以使用Bundler来创建一个宝石
bundle gem name-of-my-gem
我可以像这样使用gem,将它放在每个应用程序中
gem "name-of-my-gem", path: "path/to/gem/dir"
我如何实际告诉我我想把哪些型号放入宝石?
答案 0 :(得分: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目录中的文件列表并加载每个文件,这样你就不必将每个新模型添加到这个文件中。由你决定。
每个models/
文件看起来与rails应用中的模型完全相同:
class Customer < ActiveRecord::Base
has_many :orders
# ...
end
您可以在他们当前所在的rails应用中复制您要从app/models/
分享的所有模型类,并将其粘贴到您的gem中的models/
。然后,您只需更新每个应用程序中的gem(在每个应用程序中运行bundle update name-of-my-gem
),您应该能够从app/models/
中取出该模型,它应该仍然有效,因为它将从您的宝石。
此方法的一个缺点是,在您进行更改后,rails无法再重新加载模型。更改gem中的模型后,您需要运行bundle update name-of-my-gem
,然后重新启动rails服务器。我建议首先在一个应用程序中充实大部分模型的功能,以利用rails代码重新加载,并且当它非常稳定时将其移动到gem中。
你也可以给你的宝石代码重装权力,但这变得相当复杂,我从来没有这样做过。