<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d4684235500622716427\x26blogName\x3dCaiwangqin\x27s+blog\x26publishMode\x3dPUBLISH_MODE_HOSTED\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttp://blog.caiwangqin.com/search\x26blogLocale\x3dzh_CN\x26v\x3d2\x26homepageUrl\x3dhttp://blog.caiwangqin.com/\x26vt\x3d3393395200455623441', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script>

Caiwangqin's blog

Focus on Life, Cloud Service, Smart Hardware, Architecture, Technic and beyond…

RoR相对路径配置

2006年9月27日星期三

anuxs在railscn上提问


我写的一个应用,是项目的一部分,做完了,要把它合到现有的项目中去(这个项目是用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”



标签:

posted by Caiwangqin, 06:47

0 Comments:

发表评论

订阅 博文评论 [Atom]

<< 主页