如何在一个域(和子)上提供多个rails应用程序?

时间:2010-12-30 01:11:11

标签: ruby-on-rails apache passenger refinerycms

这有点奇怪,但我想在同一个域上提供多个网站。如果可能的话,我们希望避免使用子域名来保持用户的网址简单 - 不需要他们知道它是两个独立的应用程序。这纯粹是为了保持代码库分开。有什么想法吗?

例如:

Rails App 1(炼油厂CMS)服务:

http://example.com/

http://example.com/about

http://example.com/pricing

Rails App 2(我们的真实应用程序)服务于:

http://example.com/account

http://example.com/store

http://example.com/listings

我们使用ruby 1.9.2,ruby on rails,refinery cms,apache和passenger。

4 个答案:

答案 0 :(得分:11)

如果您正在使用Passenger,请查看手册的Deploying to a sub URI部分 - 在子URI上设置应用程序非常简单。您可能还需要在应用配置中设置config.action_controller.relative_url_root

编辑:我误解了这个问题;每个URI不是一个应用程序,而是一个为一些(但不是全部)端点提供服务的应用程序。对于一些基本的重写,这实际上也很容易做到。

将您的Rails应用程序部署到/railsapp(但不设置relative_url_root)。现在,在.htaccess:

RewriteRule ^account/(.*)$ railsapp/account/$1 [L]

这将在内部重新映射/帐户/ *到/ railsapp / account / *,因此只要您设置Rails应用程序处理的每个路径的重写,它就可以正常工作。

答案 1 :(得分:0)

子域名变得更容易(因此大多数网站都有shop.example.com),但您可能会使用基于名称的虚拟主机路由的重写规则。究竟如何做到这一点我不确定。更多针对SuperUser的Apache重写问题。

如果您使用的是SSL,则可能会出现问题。

答案 2 :(得分:0)

您可以将其设置为首先点击一个您希望大多数网址可以使用的应用,如果是404,您可以指示它接下来尝试其他应用,尽管这会比每个路由的路由慢但是它可以正常运行为在Refinery CMS上创建的每个页面硬编码路线。

答案 3 :(得分:0)

目前我也在开发同一种CMS。在我的情况下,我还需要多个子域,比如

www.test1.mydomain.com

www.test2.mydomain.com

www.test3.mydomain.com

www.test4.mydomain.com

这是我做的事情

在rails 3中

(如果您在rails3上),您可以使用请求对象获取子域。 (如果你在rails 2.x上,你可以使用sub domain_fu插件)

在我的情况下,我使用了一个前置过滤器来获取子域,之后我根据子域加载了站点

对于开发,请使用以下公共域“lvh.me”

http://tbaggery.com/2010/03/04/smack-a-ho-st.html

这对我来说非常有用http://railscasts.com/episodes/221-subdomains-in-rails-3

让用户将其域名转发到您的子域(带屏蔽)

例如:www.clientdomain.com - > http://client.mydomain.com

希望这会有所帮助

欢呼声

sameera