简体   繁体   中英

Carrierwave - development upload issues after adding S3/Fog for production

I got my production rails 3 app setup to use Fog/S3 for storage while running on Heroku. In the process, I made a few changes to /config/initializers/carrierwave.rb . Here's what it looks like:

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

Here's my image_uploader :

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

Uploads are working fine in production. Files are being uploaded to the correct destination in development, but I get this error when viewing an uploaded image:

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

I'm unsure of how to fix this. Am I missing something in my uploader? Help please? Let me know if you need more info. Thanks in advance!

EDIT Code example that throws error:

<% @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 %>

Set config.root as below

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

Currently the files are getting uploaded in Rails.root directory which are non accessible from the browser as they are not in public directory.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM