我正在开发一个电子商务应用程序,并在其管理网站上工作。这两个应用程序具有相同的业务域,并且在管理应用程序中需要一些来自电子商务应用程序的模型。
我在网上找到了一些共享模型的解决方案,虽然我不清楚哪个更好,我应该如何实现它。
我发现的解决方案:
Create a rake task to copy the models from the e-commerce app to the admin app
自动将模型从电子商务应用加载到管理红宝石搜索
config.autoload_paths += %W(#{config.root}/../e-commerce-app/app/models/)
我认为第二种解决方案是正确的方法,但我不确定如何实现它。
答案 0 :(得分:9)
这些都没有。
如何创建共享gem并将其放在私有git repo上。使用Rails,您可以通过将gem打包为rails_engine来提供与应用程序本身内自动加载模型相同的机制
请参阅example
最后在Gemfile中需要它
gem 'my_gem_name', git: 'http:my_git_repo.com/my_gem_name'
更先进的解决方案是为电子商务应用中的所需数据创建REST服务,并在管理应用中使用它。特别是对于用户(和身份验证),它甚至可以将其提取到单独的应用程序并提供UserAuthentication服务。
答案 1 :(得分:2)
最简单的方法是使用命令行创建一个'Mountable'gem:
rails plugin new e_commerce_app_core --mountable
这将设置您的rails引擎,因此您只需将模型从应用移至e_commerce_app_core/app/models/
。
我像这样包含宝石:
gem 'e_commerce_app_core_core', git: 'https://github.com/my_repo/e_commerce_app_core_core.git'
然后我跑:
bundle config local.e_commerce_app_core_core ../e_commerce_app_core_core
此命令将本地目录附加到您的构建而不是使用外部存储库。这样我可以在本地处理gem,并在我准备好时将其推送到github。
我还移动了包含登录逻辑的用户控制器,但为了让我的用户路由正常工作我改变了我的config/routes.rb
:
ECommerceAppCore::Engine.routes.draw do
...
end
为:
Rails.application.routes.draw do
...
end
我将迁移添加到我的application.rb
config.paths['db/migrate'] = ECommerceAppCore::Engine.paths['db/migrate'].existent
答案 2 :(得分:1)
您可以使用Git-subtree。
Git Subtree用于在rails应用程序之间共享代码
我认为这会对你有帮助。