2011-07-20 63 views
5

我有两个Rails应用程序(使用rails 3.0.7),称它们为“blog”和“auth”。我想从“博客”中挂载“auth”,这样我就可以运行“博客”应用程序,并将某些请求路由到“auth”应用程序。如何将现有的Rails应用程序嵌入/装载到另一个Rails应用程序中?

看来我需要嵌入或可能创建一个“引擎”,但我不是100%确定哪个是正确的。

如何在“博客”应用程序中嵌入“auth”应用程序?

+2

创建引擎是继续进行的方式。 – apneadiving

回答

0

如果auth应用程序类似于web服务(例如Facebook身份验证),那么只需保持2个应用程序运行并通过一个应用程序使用urls向另一个应用程序发出请求。

如果这些应用程序共享一些逻辑或相同的数据库,您可以合并代码,以便两个应用程序成为一个,或者您可以使'auth'应用程序像gem或插件一样并在您的博客中使用'app。

+0

“只保留2个应用程序运行,并通过一个应用程序向另一个应用程序发送请求。”那么从客户端向另一个应用程序发出请求?最初的计划是让“博客”应用程序的客户端向“auth”应用程序发出请求(使用ajax),但这需要使用只允许GET的JSONP。我需要访问的一些服务需要POST,DELETE,PUT等。 – codecraig

+0

如果您要将一个Rails应用程序调用到另一个使用活动资源。 http://railscasts.com/episodes/94-activeresource-basics – lukemh

1

Rails3是一个基于机架的应用程序。 Rackmiddleware已经有一些默认的内置应用程序。尝试运行捆绑执行耙中间件。您可以将自定义Rack应用程序添加到堆栈中。使用this博客帖子查看它是如何工作的。

+0

我已经看过那篇文章,但我仍然想知道,如何让我的“博客”应用程序需要“auth”应用程序?这不像“auth”rails应用程序是一个宝石,我可以在我的“博客”应用程序中添加到Gemfile中。 – codecraig

+0

我不明白,您是否需要将验证添加到您的应用程序中? – Anatoly

+0

我有一个名为'auth'的rails应用程序,提供身份验证。我希望我的“博客”rails应用程序的客户端代码能够通过“auth”应用程序进行GET/POST等。我无法直接从JSONP的'博客'客户端b/c中的JavaScript代码(只有GET的工作)做到这一点。我想从“博客”应用程序中安装“auth”应用程序,以便我可以访问auth。来自客户端代码的东西。那有意义吗? 现在我认为我的主要问题是,如何获得由“博客”应用程序装载的“auth”应用程序?我不能像这样的博客文章建议b/c挂载auth应用程序不在博客应用程序的加载路径。 – codecraig

2

如果您试图在一个Ruby实例中定义两个Rails应用程序,但它在this提交后发生了更改,Rails正在提高RuntimeError: You cannot have more than one Rails::Application

这在4.0.0中仍未发布,但会包含在较新的版本中。 (>4.1.0.β)

检查出the discussion on PR欲知更多信息。


从我的理解,你可能不需要有两个Rails应用程序,但。您应该尝试从Rails::Engine中提取所需的功能。

Remember, Rails::Application is also a Rails::Engine.

你可以找到一个关于如何做到这一点在网络上大量的材料,我会建议thesetwo让你开始。

2

您可以为'auth'应用程序创建“rails-engine”,然后将此引擎挂载到rails应用程序中,即'blog'应用程序。

了解更多关于的Rails ::引擎在下面的链接 -

http://guides.rubyonrails.org/engines.html

http://api.rubyonrails.org/classes/Rails/Engine.html

要嵌入滑轨安装发动机到Rails应用程序,请执行以下常规步骤 -

1 )打开需要嵌入引擎的目标Rails项目。

2)打开用于编辑的Gemfile,并添加以下行:

gem '<engine name>', :path => "<absolute path to the Rails mountable engine project>" 

3)打开用于编辑配置/路由。rb,并添加以下行:

mount <engine name>::Engine, :at => "/<engine name>" 
相关问题