22

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

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

谢谢!

4

5 回答 5

4

我这样做的方式是“可安装引擎”。查看Ryan Bates 的优秀 Railscast入门和api.rubyonrails.org上的引擎部分了解更多详细信息。

最好的问候, 曼迪

于 2012-05-08T09:16:43.230 回答
1

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

这需要更多的工作,但是一旦您在一个应用程序中完成了一次,就很容易将其用作下一个应用程序的模板。

于 2012-06-06T17:48:32.283 回答
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 submodule 的路径,例如(如果你使用 GIT,我推荐这个解决方案)。

另一种选择可能是指向app/models带有软链接的共享文件夹

于 2012-06-03T14:04:29.733 回答
0

你可以尝试 git submodule 来完成这项工作。

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

于 2012-06-06T20:26:22.750 回答