如何将现有的Rails应用程序嵌入/挂载到另一个Rails应用程序中?

5
我有两个Rails应用程序(使用rails 3.0.7),分别称为“blog”和“auth”。我想将“auth”从“blog”中挂载,以便我可以运行“blog”应用程序,并将某些请求路由到“auth”应用程序。
看起来我需要嵌入或创建一个“engine”,但我不确定哪个是正确的。
如何在“blog”应用程序内嵌入“auth”应用程序?

2
创建引擎是继续进行的方式。 - apneadiving
4个回答

2
你可以为“auth”应用程序创建“rails-engine”,然后将此引擎挂载到Rails应用程序(即“blog”应用程序)中。
在下面的链接中了解有关Rails::Engine的更多信息 -

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

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

将Rails可安装引擎嵌入到Rails应用程序中,请遵循以下一般步骤 -
1)打开目标Rails项目,应该在其中嵌入引擎。
2)打开Gemfile以进行编辑,并添加以下行:
gem '<engine name>', :path => "<absolute path to the Rails mountable engine project>"

3)打开 Config/routes.rb 文件进行编辑,并添加以下行:
 mount <engine name>::Engine, :at => "/<engine name>"

2

在一个 Ruby 实例中定义两个 Rails 应用程序会导致 RuntimeError: You cannot have more than one Rails::Application 错误,但是在 这个 提交之后已经发生了变化。

这个变化还未发布在 4.0.0 中,但将被包含在更新版本中。(> 4.1.0.beta)

有关更多信息,请查看PR上的讨论


从我所了解的情况来看,您可能不需要拥有两个 Rails 应用程序。您应该尝试在 Rails::Engine 中提取所需的功能。

请记住,Rails::Application 也是一个 Rails::Engine

您可以在网上找到很多关于如何执行此操作的资料,我建议您先阅读这篇文章这篇文章来开始您的工作。


1
Rails3是一个基于Rack的应用程序。Rack中间件已经有一些默认的内置应用程序。尝试运行bundle exec rake middleware。您可以将自定义的Rack应用程序添加到堆栈中。使用this博客文章来了解它的工作原理。

我看过那篇文章,但我仍然想知道,如何让我的“博客”应用程序需要“auth”应用程序?毕竟,“auth” Rails 应用程序并不是我可以只需将其添加到“blog”应用程序的 Gemfile 中的 gem。 - codecraig
我不明白,你的应用程序需要添加身份验证吗? - Anatoly
我有一个名为“auth”的Rails应用程序,提供身份验证。我希望我的“blog” Rails应用程序的客户端代码可以GET / POST等到“auth”应用程序。由于JSONP(只有GET有效),我无法直接从“blog”客户端中的JavaScript代码执行此操作。我想要在“blog”应用程序中/从中挂载“auth”应用程序,以便我可以从客户端代码访问auth内容。这有意义吗?现在,我认为我的主要问题是如何让“blog”应用程序挂载“auth”应用程序?我不能像博客文章建议的那样挂载,因为auth应用程序不在blog应用程序的加载路径上。 - codecraig

0
如果 auth 应用程序类似于 Web 服务(例如 Facebook 身份验证),那么只需保持两个应用程序运行,并从一个应用程序使用 URL 请求另一个应用程序。 如果这些应用程序共享某些逻辑或相同的数据库,您可以将代码合并,使两个应用程序成为一个,或者您可以将“auth”应用程序变成 gem 或插件,并在您的“blog”应用程序中使用它。

只需保持2个应用程序运行,并从一个应用程序使用URL向另一个应用程序发出请求。所以从客户端向其他应用程序发出请求?最初的计划是让“博客”应用程序的客户端通过ajax向“auth”应用程序发出请求,但这将需要使用JSONP,它仅允许GET。我需要访问的一些服务需要POST、DELETE、PUT等请求方式。 - codecraig
如果您想调用一个Rails应用程序到另一个Rails应用程序,请使用Active Resource。http://railscasts.com/episodes/94-activeresource-basics - lukemh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接