2012-05-07 54 views
20

我目前正在使用Ruby on Rails构建2个API。一个用于阅读(查找对象,查询),另一个用于实际写入,涉及一种带有队列和另一个API的复杂进程。两个应用程序都需要完全相同的模型和逻辑。在2 Rails API之间共享模型(单独的应用程序)

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

谢谢!

+0

您可以更改这两个API的代码?还是有一些限制? –

+0

@NigelThorne我当然可以,他们都是我自己造的。 – Gotjosh

回答

4

我会这样做的方式是“可挂载引擎”。查看优秀的Railscast by Ryan Bates初学者和engine-section at api.rubyonrails.org了解更多详情。

与问候,曼迪

+0

该railscast是假定旨在为新的应用程序,但它的第一个API已经制作,除了虽然引擎,你会分享控制器和意见,如果我是正确的,这不是我的情况... – Gotjosh

+2

@Gotjosh你可以提取你现有的模型进入引擎(这是最好的包装成宝石)。然后将这个宝石包含到您的旧应用程序中,并且可以使用您的模型。您可以将宝石包含到您喜欢的任何其他应用程序中。不,引擎不会自动提供控制器。引擎可以提供Rails应用程序,模型,视图,控制器,资产文件(JS,CSS)等的任何或所有部分。关于此的一本好书是JoséValim的“Crafting Rails应用程序”。 –

1

,你可以将其他项目模型文件夹添加到自动加载路径中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到共享文件夹的软链接

1

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

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

+0

这并不意味着你必须在一个应用程序中将更改推送到Git,然后才能在其他应用程序中看到它们吗?你将如何开发和测试新的东西? “发动机”是什么意思? – Chloe

相关问题