我目前正在使用Ruby on Rails构建2个API。一个用于阅读(查找对象,查询),另一个用于实际写入,涉及一种带有队列和另一个API的复杂进程。两个应用程序都需要完全相同的模型和逻辑。在2 Rails API之间共享模型(单独的应用程序)
我的问题是,在2个rails应用程序之间共享模型规范(关系,范围,方法)的最常见的最佳实践或方法是什么?
谢谢!
我目前正在使用Ruby on Rails构建2个API。一个用于阅读(查找对象,查询),另一个用于实际写入,涉及一种带有队列和另一个API的复杂进程。两个应用程序都需要完全相同的模型和逻辑。在2 Rails API之间共享模型(单独的应用程序)
我的问题是,在2个rails应用程序之间共享模型规范(关系,范围,方法)的最常见的最佳实践或方法是什么?
谢谢!
我会这样做的方式是“可挂载引擎”。查看优秀的Railscast by Ryan Bates初学者和engine-section at api.rubyonrails.org了解更多详情。
与问候,曼迪
该railscast是假定旨在为新的应用程序,但它的第一个API已经制作,除了虽然引擎,你会分享控制器和意见,如果我是正确的,这不是我的情况... – Gotjosh
@Gotjosh你可以提取你现有的模型进入引擎(这是最好的包装成宝石)。然后将这个宝石包含到您的旧应用程序中,并且可以使用您的模型。您可以将宝石包含到您喜欢的任何其他应用程序中。不,引擎不会自动提供控制器。引擎可以提供Rails应用程序,模型,视图,控制器,资产文件(JS,CSS)等的任何或所有部分。关于此的一本好书是JoséValim的“Crafting Rails应用程序”。 –
,你可以将其他项目模型文件夹添加到自动加载路径中S:
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
到共享文件夹的软链接
我这样做这一招是不实际使用Rails的技巧。我使用“git”技巧,并从第三个共享代码仓库中提取代码。我将它作为引擎放入这两个应用程序中,并作为外部git参考。
这是一个更多的工作,但是一旦你在一个应用程序中完成了一次,就很容易将它用作下一个应用程序的模板。
这并不意味着你必须在一个应用程序中将更改推送到Git,然后才能在其他应用程序中看到它们吗?你将如何开发和测试新的东西? “发动机”是什么意思? – Chloe
你可以尝试git submodule那个工作。
虽然Git子模块很有用,但是一个限制是无法将子模块部署到Heroku。 –
您可以更改这两个API的代码?还是有一些限制? –
@NigelThorne我当然可以,他们都是我自己造的。 – Gotjosh