我已经解决了许多有趣的路由问题 - 将请求URL转换为哈希等等,但出于好奇,有没有办法告诉路由系统你想要任何属于某个url的东西字面上要提供的子路径 - 无需通过控制器?
例如,如果我有/home/me/public_html/rails_proj/images/foo.jpg和.../rails_proj/images/other/bar.jpg,我可以插入一条说"图像下的任何内容应该只是作为默认mime类型的对象?"
可能很有趣.
如果您将"images"目录放入Rails应用程序的"public"文件夹(例如:/ public/images /),那么除非您的Web服务器配置错误,否则您不应该遇到MIME类型的任何问题.
根据您的示例,您需要应用程序根目录中的图像目录.我不认为Rails有一种方法可以使这些图像可见,但如果你真的想要,你可以使用mod_rewrite使它工作.再一次,由Web服务器决定图像是否具有正确的MIME类型.
从公共目录提供的东西不会通过Rails - 它们只会由您的服务器(可能是apache)处理.您需要通过rails系统提供图像的唯一原因是,您希望对谁可以访问它们进行某种控制.只需将其他所有内容公开并访问ala:siteurl.whatever/images/*.jpg
我通常使用nginx作为前端,使用Apache/Passenger作为后端.Ngingx代理所有对Apache的Rails请求,但处理所有静态内容本身.查看英文nginx wiki上的示例.这是nginx配置的一小段摘录:
server { listen 80; server_name www.domain.com; location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js)$ { root /path/to/static/assets/dir; } location / { proxy_pass http://127.0.0.1:81; } }
所以让apache监听端口81来处理由nginx代理的Rails请求,并让nginx传递静态内容.在提供静态内容时,nginx不仅比Apache更快,而且还为每个图像,样式表,javascript或其他任何静态内容卸载了Rails应用程序.