Ruby on rails 3 Rails 3发送数据问题;生产与发展的差异

Ruby on rails 3 Rails 3发送数据问题;生产与发展的差异,ruby-on-rails-3,image,development-environment,production-environment,Ruby On Rails 3,Image,Development Environment,Production Environment,我的Rails 3应用程序中有一个奇怪的bug。我正在使用此代码发送非公开的图像: image = open(f, "rb") { |io| io.read } send_data(image, :disposition => 'inline') 我正在使用此代码在管理页面和用户页面中显示图像。如果我使用开发环境,这段代码工作正常,图像显示在两个页面上。但若我使用生产环境,这些图像只显示在管理页面中,而不显示在用户页面中。我可以单击未显示的图像,然后选择“属性”。在“图像类型”下,我看到

我的Rails 3应用程序中有一个奇怪的bug。我正在使用此代码发送非公开的图像:

image = open(f, "rb") { |io| io.read }
send_data(image, :disposition => 'inline')
我正在使用此代码在管理页面和用户页面中显示图像。如果我使用开发环境,这段代码工作正常,图像显示在两个页面上。但若我使用生产环境,这些图像只显示在管理页面中,而不显示在用户页面中。我可以单击未显示的图像,然后选择“属性”。在“图像类型”下,我看到:

application/xhtml+xml
但是其他公共图像的类型是JPG image/PNG image或类似的


环境之间的哪些差异可能导致图像无法正常工作?我该如何解决这一问题,以便在所有页面上正确显示图像?

我有一个明显相似的症状。我知道这是一个老问题,已经解决了,但我想我会贡献我的情况,这是一个不同的原因的调查结果

我正在构建一个CSV文件,并使用send_file将文件发送到浏览器。在开发过程中效果很好,在生产过程中浏览器报告未找到页面

以下是来自控制器的操作

def export
  @campaign = LiveEmailCampaign.find params[:id]
  @campaign.recipients_csv do |csv_file|
    send_file csv_file,
      filename: @campaign.name,
      type: Mime::CSV 
  end 
end
CSV是根据模型中的代码构建的

def recipients_csv
  tempfile = Tempfile.new(self.name.downcase.dasherize)
  CSV.open tempfile, 'w' do |csv|
    recipients.each do |recipient|
      csv << [recipient]
    end
  end
  yield tempfile
end

现在,Rails和Apache又是朋友了。我只需要重构这段代码,因为它没有显式地取消创建的临时文件的链接。最佳做法是显式取消临时文件的链接。

看看这些文档,它们提到了很多可能出错的地方:。问题在于应用程序代码(在筛选之前)的访问限制,在可能的情况下。一位朋友设法帮我解决了:)你可以添加你的解决方案作为答案,这样其他人就可以从你的麻烦中学习:)在我的例子中,问题出在写得不好的代码中。我使用before过滤器检查用户是否可以看到页面。在这个before过滤器中,我有一个reditect_to,它将请求重定向到了首页。因此,当浏览器发送图片请求时,它会被前置过滤器重定向到frontpage。这就是为什么类型是HTML。很抱歉之前没有写,但我没有回复,因为这是我代码中的一个bug,而不是rails的问题。但我仍然不知道这怎么会在开发中起作用?!?!?
tempfile = Tempfile.new(self.name.downcase.dasherize)