RoR相对路径配置
2006年9月27日星期三
我写的一个应用,是项目的一部分,做完了,要把它合到现有的项目中去(这个项目是用C++做Apahce 的module扩展来实现的),作为一个子目录比如/task,使用的方法是mongrel + apache + proxy,把这个/task子路径映射到后台的mongrel_rails进程上。也就是反向代理。
网上有文章:http://mongrel.rubyforge.org/docs/apache.html
mongrel的启动参数:代码:
sudo mongrel_rails start -e production –prefix /task
apache2.2.3的配置:
代码:
ProxyRequests Off
ProxyPass /task http://0.0.0.0:3000/task
ProxyPassReverse /task http://0.0.0.0:3000/task现在访问http://X.X.X.X/task,应用都比较正常,比如原来的路径是/project/list,现在就是/task/project/list。统统的自动在原来的路径前面加了一级/task/
唯一的问题是:
原来在Rails中手写了一些链接,比如“返回首页”,写的链接路径是“/”,在目前的这个环境中就不正常了,它应该还是回到原来Rails程序的public目录下,而不是回到我现在的apache的根目录下。
原来以来不用link_to或者url_for生成链接,直接手写路径会提高rhtml的解析效率,现在就碰到这样的移植问题。目前已经把应该用link_to/url_for的已经全部换掉了,
再重复一遍我的问题:如何写link_to/url_for,让原来Rails的”/”在我的环境下还是回到Rails的public目录?还有一些链接的静态html文件,如何在移植的环境下,找到服务器上的正确的路径?
路径肯定不能写死。
我记得asp/php下面都有这样的server_map之类的函数,得到一个文件的相对路径。
解决方法:
在 config/environment.rb 中加一行:
ActionController::AbstractRequest.relative_url_root = “/task”
然后在 config/routes.rb 中加一行:
map.connect ‘/’, :controller => “task”, :action => “index”
标签: Technologies
发表评论
订阅 博文评论 [Atom]
<< 主页