在两个 Rails API(单独的应用程序)之间共享模型

问题描述 投票:0回答:5

我目前正在使用 Ruby on Rails 构建两个 API。一个 if 用于读取(查找对象、查询),另一个用于实际写入,涉及一种带有队列和另一个 API 的复杂过程。两个应用程序都需要完全相同的模型和内部逻辑。

我的问题是,在两个 Rails 应用程序之间共享模型规范(关系、范围、方法)的最常见的最佳实践或方法是什么?

ruby ruby-on-rails-3
5个回答

4
投票

我的做法是“可安装引擎”。请查看 Ryan Bates 的优秀 Railscast 作为初学者,并查看 api.rubyonrails.org 上的 engine-section 了解更多详细信息。


1
投票

如果您只想共享模型,您可以将其他项目模型文件夹添加到自动加载路径中:

rails new test1
rails new test2
cd test1
rails g model User 
cd ../test2/
# ACTION REQUIRED: edit config/application.rb adding this line
# inside the class Application < Rails::Application block:
#
# config.autoload_paths += %W(#{config.root}/../test1/app/models)
#
mkdir db/migrate
cp ../test1/db/migrate/*_create_users.rb db/
mv db/*_create_users.rb db/migrate/
rake db:migrate
rails r 'puts User.inspect' 
#=> User(id: integer, created_at: datetime, updated_at: datetime)

您还可以设置整个内容,以便将两个

app/models
文件夹设为私有,使用第三个共享文件夹,并将其添加到项目中:

# config.autoload_paths += %W(/path/to/a/shared/folder)

这个文件夹甚至可以不是每个项目的同一个文件夹,因此它可以是 git 子模块的路径,例如(如果您使用 GIT,我推荐这个解决方案)。

另一个选项可能是通过软链接指向

app/models
共享文件夹


1
投票

我这样做的技巧是不实际使用 Rails 技巧。 我使用“git”技巧,并从第三个共享代码存储库中提取代码。 我将其作为引擎和外部 git 参考放入两个应用程序中。

这需要更多的工作,但是一旦您在一个应用程序中完成一次,就可以轻松地将其用作下一个应用程序的模板。


0
投票

你可以尝试使用 git 子模块来完成这项工作。

http://git-scm.com/book/en/Git-Tools-Submodules

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