有没有办法将map.root更改为指向“/”以外的其他内容?

时间:2009-03-23 01:44:46

标签: ruby-on-rails passenger

我有apache 2.2,mod_rails运行在http://localhost。我希望我的rails应用程序位于http://localhost/ railsBlog 。所以,我做的是,我创建了一个虚拟主机:


  ServerName localhost
  DocumentRoot /Library/WebServer/Documents
  RailsEnv development
  RailsBaseURI /railsBlog

现在,由于URL为http://localhost/ railsBlog ,服务器将 railsBlog 视为我传入的控制器,这不是我想要的。所以当我转到http://localhost/ railsBlog / home / index时。这不会进入我的'home'控制器和'index'视图,因为它试图转到' railsBlog '控制器(不存在)和'home'视图(不存在)

我认为解决这个问题的一种方法是将map.root重新定义为 / railsBlog ,事情应该没问题。但是如何?

我可以解决这个问题的另一种方法是修改config / routes.rb:

map.connect 'railsBlog/:controller/:action/:id'

但是,这意味着我每次部署到不同的位置时都必须更改此文件。

或者,还有其他方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您可以在config / environment.rb(或其中一个特定环境文件)中放置这样的行

config.action_controller.relative_url_root = "/railsBlog"

您还应该将publc目录符号链接到Web目录的根目录,例如:

ln -s /rails/railsBlog/public /webroot/

这一切都来自乘客文件

答案 1 :(得分:1)

只是添加到上一个答案...这里是文档的网址:

http://www.modrails.com/documentation/Users%20guide.html#deploying_rails_to_sub_uri

此外,如果您遇到图像损坏,css,资源链接错误的错误,这里有一些信息......

http://www.modrails.com/documentation/Users%20guide.html#sub_uri_deployment_uri_fix

基本上它说你应该总是使用rails helper函数(image_tag,javascript_include_tag和stylesheet_link_tag)而不是手动编码url。这些将使用您设置的子uri自动生成正确的URL。

这使您可以轻松地将应用程序移动到另一个子uri或子uri配置,而无需更改所有引用。

关于这一点的一个好处是,您可以使用一个虚拟服务器语句通过拥有多个RailsBaseURI行来部署多个应用程序。这对于我们正在尝试构建的应用程序来说非常方便。