我有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'
但是,这意味着我每次部署到不同的位置时都必须更改此文件。
或者,还有其他方法来解决这个问题吗?
答案 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行来部署多个应用程序。这对于我们正在尝试构建的应用程序来说非常方便。