载波在开发中上传到s3,但不在生产中上传(heroku)

问题描述 投票:0回答:1

我正在尝试使用carrierwave向s3进行简单的上载,但是以某种方式在heroku上的生产中却无法正常工作:文件始终放在上载store_dir定义的store_dir中,而不是在s3存储桶中。

在开发中,当我尝试时效果很好。 我遵循了carrierwave github aws的说明,但是由于它无法正常工作,所以我没有主意。

这是我的上传器和我的carrierwave.rb文件:

class PhotoUploader < CarrierWave::Uploader::Base
  storage :fog

  def extension_whitelist
    %w(jpg jpeg gif png)
  end
end


 CarrierWave.configure do |config|
   config.fog_provider = 'fog/aws'                        # required
   config.fog_credentials = {
     provider:              'AWS',                        # required
     aws_access_key_id:     ENV['S3_KEY'],                        # required
     aws_secret_access_key: ENV['S3_SECRET'],                        # required
     region:                ENV['S3_REGION'],
     # host:                  's3.example.com',             # optional, defaults to nil
     # endpoint:              'https://s3.example.com:8080' # optional, defaults to nil
    }
   config.fog_directory  = ENV['S3_BUCKET']                                   # required
   config.fog_public     = false                                                 # optional, defaults to true
   config.fog_attributes = { cache_control: "public, max-age=#{365.days.to_i}" } # optional, defaults to {}
 end

有人有什么想法吗?

ruby-on-rails amazon-s3 carrierwave
1个回答
1
投票

在github上的carrierwave Wiki上查看,有一个部分说明了如何在heroku上使载波有效:

您可以通过将Uploader类中的cache_dir设置为tmp目录来解决此问题

class AvatarUploader < CarrierWave::Uploader::Base
 def cache_dir
   "#{Rails.root}/tmp/uploads"
 end
end

# config.ru
require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Static, :urls => ['/carrierwave'], :root => 'tmp' # adding this line
run YourApplicationName::Application

# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  config.root = Rails.root.join('tmp') # adding these...
  config.cache_dir = 'carrierwave' # ...two lines

  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :aws_access_key_id      => 'key',                        # required
    :aws_secret_access_key  => 'secret',                     # required
    :region                 => 'eu-west-1',                  # optional, defaults to 'us-east-1'
    :host                   => 's3.example.com',             # optional, defaults to nil
    :endpoint               => 'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = 'directory'                             # required
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end
© www.soinside.com 2019 - 2024. All rights reserved.