Carrierwave - 添加S3 / Fog进行生产后的开发上传问题

时间:2014-03-25 22:35:35

标签: ruby-on-rails carrierwave

我的生产rails 3 app设置在Heroku上运行时使用Fog / S3进行存储。在此过程中,我对/config/initializers/carrierwave.rb进行了一些更改。这是它的样子:

CarrierWave.configure do |config|

  if Rails.env.test? || Rails.env.development?
    config.root = Rails.root
    config.storage = :file
  else
    config.storage = :fog
    config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :aws_access_key_id      => ENV['MY_ID'],                        # required
    :aws_secret_access_key  => ENV['MY_KEY']                        # required
    }
      config.fog_directory  = 'my-app'                     # required
      config.fog_public     = false                                   # optional, defaults to true
      #config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
  end
end

这是我的image_uploader

class ImageUploader < CarrierWave::Uploader::Base
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

上传在生产中运作良好。文件正在开发中上传到正确的目的地,但在查看上传的图像时出现此错误:

ActionController::RoutingError (No route matches [GET] "/uploads/vendor/image/24/StoreB.png"):

我不确定如何解决这个问题。我在上传器中遗漏了什么吗?请帮忙?如果您需要更多信息,请告诉我。提前谢谢!

修改 抛出错误的代码示例:

<% @stores.each do |s| %>
        <div class="row">
                <div class= "col-xs-9 horz-cent">
                        <%= link_to image_tag("#{s.vendor.image}"), user_show_store_path(s) %>
                </div>
        </div>
<% end %>

1 个答案:

答案 0 :(得分:2)

config.root设置如下

 config.root = Rails.root.join('public')

目前,这些文件已上传到Rails.root目录中,这些文件无法从浏览器访问,因为它们不在public目录中。