如何显示存储在项目目录外的图像?
有一种简单的方法吗?
答案 0 :(得分:9)
我看到两种方式:
http://yourapp.com/images/
服务文件。在rails中,使用传统image_tag
Nginx示例:
# Find the right `server` section which you currently use to serve your rails app
server {
listen 80;
# Add this
location /images {
root /var/www/my/specific/folder;
}
location / {
#...
#... Here you should already some code to proxy to your rails server
}
}
With that, when you access to `yourserver.com/images`, nginx serve your specific folder and not your rails app. Then in your app view :
<%= image_tag 'http://yourserver.com/images/my_pic.jpg' %>
如果您无法访问服务器设置,则可以使用send_file
在控制器中:
class ImagesController < ApplicationController
def show
send_file File.join('/var/www/my/specific/folder',params[:name]), :disposition => 'inline'
end
end
在config/routes.rb
match '/images/:name' => 'images#show', :as => :custom_image
然后当您访问此操作时(通过您在config/routes.rb
中定义的路线),您就拥有了该图像。因此,在您的视图中,您使用以下网址进行传统image_tag
:
<%= image_tag custom_image_path( 'my_pic.jpg' ) %>
OR
<%= image_tag custom_image_url( 'my_pic.jpg' ) %>
答案 1 :(得分:0)
如果它存储在Rails应用程序目录之外,那么它不属于资产管道,您可以直接链接到它:
<%= image_tag("http://example.com/some_file.jpg") %>
显然它必须可以通过HTTP访问(您需要安装nginx或Apache服务器)。
答案 2 :(得分:0)
这可能是个坏主意,并会导致一系列问题。一些安全性,一些功能,但我实际上不知道的大部分效果。
根据经验,我确实知道,无论何时你违背轨道惯例来了解事物的内容和地点,这是一个很容易打破的滑坡,最好避免。
使用提供的框架创建解决方案。
请注意,如果您使用rails 3.1+而不是&lt; = 3.0,则由于资产编译将js,css和图像复制到公共场所,此功能也会受到影响。