假设我有一张图像不在正常位置:
{appname}/public/images/unconventional.gif
但是在这里:
{appname}/unconventional.gif
我知道这完全违反了 Rails 惯例,是不道德的,你在任何情况下都不应该这样做,而且,为什么我会建议这样一个愚蠢的事情呢?
好的,既然我们已经解决了这个问题,假设我使用的是 Windows,因此符号链接(symbolic link)是不可能的,那么如何进行设置呢?
最佳答案
Rails 不提供这些图像,它让 Web 服务器提供这些图像。您最好更改 Web 服务器的配置来处理这种情况。例如,如果您使用 Apache,则使用 mod_rewrite 进行设置会相当容易。
让 Rails 为这些图像提供服务会很丑陋,但是如果您在 routes.rb
中提供与 /public/images/匹配的路线,这是可能的。 unconventional.gif
,并且如果文件本身不存在。例如:
map.connect "public/images/unconventional.gif",
:controller => "static_image_controller",
:action => "serve"
然后创建一个 Controller 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]
,例如例如),您需要彻底清理输入,因为您面临着将整个文件系统暴露给外界的风险。
关于ruby-on-rails - 如何配置 Rails 来访问不在其常规目录位置的媒体资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029442/