提供静态资产的路由(如.jpgs等?)

时间:2009-02-10 05:56:00

标签: ruby-on-rails jpeg routes

我已经解决了许多有趣的路由问题 - 将请求URL转换为哈希等等,但出于好奇,有没有办法告诉路由系统你想要的任何东西一个url子路径按字面服务 - 不通过控制器?

例如,如果我有/home/me/public_html/rails_proj/images/foo.jpg和... / rails_proj / images / other / bar.jpg,我可以插入一条说“图像下方的任何内容”的路线应该只作为默认mime类型的对象?“

可能很有趣。

5 个答案:

答案 0 :(得分:16)

如果您将“images”目录放入Rails应用程序的“public”文件夹(例如:/ public / images /),那么除非您的Web服务器配置错误,否则您不应该遇到MIME类型的任何问题。

根据您的示例,您需要应用根目录中的图片目录。我不认为Rails有一种方法可以使这些图像可见,但如果你真的想要,你可以使用mod_rewrite使它工作。再一次,由Web服务器来确保图像具有正确的MIME类型。

答案 1 :(得分:6)

从公共目录提供的东西不会通过Rails - 它们只会由您的服务器(可能是apache)处理。您需要通过rails系统提供图像的唯一原因是,您希望对谁可以访问它们进行某种控制。只需将其他所有内容公开并访问ala: siteurl.whatever /图像/ *。JPG

答案 2 :(得分:5)

我通常使用nginx作为前端,使用Apache / Passenger作为后端。 Ngingx代理所有对Apache的Rails请求,但处理所有静态内容本身。查看the English 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应用程序。

答案 3 :(得分:2)

我认为解决此问题的最简单方法就是使用image_path辅助方法,它为您提供要在视图中显示的图像的路径。 例如,如果你想在/assets/images/logo.png下引用logo.png,你可以使用image_path('logo.png')。

答案 4 :(得分:1)

警告:如果您的请求URL与静态资源WEBrick匹配,那么mongrel或其他任何东西都会很乐意为它服务。不惜一切代价,你不希望这个在生产中:如果你的流量足够高,你的应用程序就会因为它的杂种忙于提供静态内容而陷入困境。

因此,请确保您的网络服务器已针对各种静态内容进行了正确配置,如之前的评论者所指出的那样。