假设我有一个不在正常位置的图像:
{appname}/public/images/unconventional.gif
但在这里:
{appname}/unconventional.gif
我知道这完全违反了 Rails 约定,是不道德的,在任何情况下你都不应该这样做,而且,我为什么还要提出这样愚蠢的事情呢?
好的,既然我们已经解决了这个问题,假设我在 Windows 上,因此符号链接是不可能的,那么如何设置它呢?
假设我有一个不在正常位置的图像:
{appname}/public/images/unconventional.gif
但在这里:
{appname}/unconventional.gif
我知道这完全违反了 Rails 约定,是不道德的,在任何情况下你都不应该这样做,而且,我为什么还要提出这样愚蠢的事情呢?
好的,既然我们已经解决了这个问题,假设我在 Windows 上,因此符号链接是不可能的,那么如何设置它呢?
Rails 不提供这些图像,它让 Web 服务器来做。您最好更改 Web 服务器的配置来处理这种情况。Apache
例如,如果您使用mod_rewrite
.
让 Rails 为这些图像提供服务会很丑陋,但如果你在match中提供了一个路由,并且文件本身不存在,那么它是可能的。例如:routes.rb
/public/images/unconventional.gif
map.connect "public/images/unconventional.gif",
:controller => "static_image_controller",
:action => "serve"
然后创建一个控制器StaticImageController
:
class StaticImageController < ApplicationController
def serve
image = File.read(File.join(Rails.root, "unconventional.gif"))
send_data image, :type => "image/gif", :disposition => "inline"
end
end
警告:如果您使用上述概念,请注意,如果您使用来自 URL 的输入来决定服务哪个文件(params[:file]
例如,使用 ),您需要彻底清理输入,因为您有将整个文件系统暴露给外面的世界。