7

iveは、carrierwaveをamazons3で動作させることを試みています。それ以外の

storage :s3

私は持っています

storage :fog

それをstorage:s3に変更すると、すぐにエラーが発生します

https://stackoverflow.com/questions/10629827/carrierwave-cant-convert-nil-into-string-typeerror-when-using-s3

だから私はそれを以下のrdocが言うようにstorage:fogに変更しました。

http://rubydoc.info/gems/carrierwave/frames

ただし、画像をアップロードしようとすると、このクレイジーなエラーが発生します。デバイスの宝石も使用しています。

私のフルスタックトレースは

Excon::Errors::MovedPermanently in RegistrationsController#update

Excon::Errors::MovedPermanently (Expected(200) <=> Actual(301 Moved Permanently)
  request => {:connect_timeout=>60, :headers=>{"Content-Length"=>95472, "Content-Type"=>"image/jpeg", "x-amz-acl"=>"private", "Cache-Control"=>"max-age=315576000", "Date"=>"Thu, 17 May 2012 05:28:55 +0000", "Authorization"=>"AWS AKIAIN6SC3YSGBSUKV4Q:kZOG9mG01jYn48ImFMYbgxAAQRk=", "Host"=>"user.a.777.s3-eu-west-1.amazonaws.com:443"}, :instrumentor_name=>"excon", :mock=>false, :read_timeout=>60, :retry_limit=>4, :ssl_ca_file=>"/Users/sasha/.rvm/gems/ruby-1.9.3-p125/gems/excon-0.13.4/data/cacert.pem", :ssl_verify_peer=>true, :write_timeout=>60, :host=>"user.a.777.s3-eu-west-1.amazonaws.com", :path=>"/uploads%2Fuser%2Fimage%2F59%2Fidea.jpg", :port=>"443", :query=>nil, :scheme=>"https", :body=>#<File:/Users/sasha/Desktop/rails_projects/blue_eyes/public/uploads/tmp/20120516-2228-19160-9893/idea.jpg>, :expects=>200, :idempotent=>true, :method=>"PUT"}
  response => #<Excon::Response:0x007fd72a146820 @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>PermanentRedirect</Code><Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message><RequestId>F5F5AF888E837622</RequestId><Bucket>user.a.777</Bucket><HostId>IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82</HostId><Endpoint>s3.amazonaws.com</Endpoint></Error>", @headers={"x-amz-request-id"=>"F5F5AF888E837622", "x-amz-id-2"=>"IShK3GIthzCQysLOKXnR+ijJiHmMuUtXBOpFxQM4uCvJgkEHfmFn43LL4oWmpT82", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 17 May 2012 05:29:00 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, @status=301>):
  app/controllers/registrations_controller.rb:30:in `update'

それが何を意味するのか私にはわかりません。

私のinitializers/carrierwave.rbにあります。

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',       # required
    :aws_access_key_id      => 'somekey',       # required
    :aws_secret_access_key  => 'secretkey',       # required
    :region                 => 'eu-west-1'  # optional, defaults to 'us-east-1'
  }
  config.fog_directory  = 'bucket.name'                     # required
  #config.fog_host       = 'https://s3.amazonaws.com'            # optional, defaults to nil
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end

私のアップローダーファイルには

  #storage :s3
  storage :fog
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

私のgemファイルには

gem 'carrierwave'
gem 'thin'
gem 'fog'

サーバーを起動すると、webrickの代わりに、開発でもthinが使用されます。

私の構成は間違っていますか?助けていただければ幸いです!iveはこのcarrierwave/s3の問題で非常に立ち往生しています

4

4 に答える 4

17

私は今日早くこれに遭遇しました、そしてそれは地域の問題でした。取り出してデフォルトで設定してください。

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',       # required
    :aws_access_key_id      => 'somekey',       # required
    :aws_secret_access_key  => 'secretkey'       # required
  }
  config.fog_directory  = 'bucket.name'                     # required
  #config.fog_host       = 'https://s3.amazonaws.com'       # optional, defaults to nil
  config.fog_public     = false                             # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
于 2012-05-22T04:00:04.500 に答える
2

私にとってはこの構成で作業しました

config.fog_directory  = 'bucket_name'                   
config.fog_host       = 'https://s3-eu-west-1.amazonaws.com/bucket_name'      
于 2012-07-11T15:38:29.347 に答える
2

私も同じ問題を抱えていました。

以下の3つのステップに従うことは私のために働いた。

1.バケット作成時にデフォルトのリージョンを変更する

2.carrierwave.rbファイルを編集します(以下を参照)

initializers/carrierwave.rb

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY'],
      :region => ENV['S3_REGION']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

3.コマンドラインで次のようにherokuを構成します。heroku config:set S3_REGION='your region'

于 2016-03-26T07:26:16.397 に答える
0

@Jason Bynumが言ったように、リージョンを指定せず、デフォルトにします。

それでも失敗しても心配しないでください。このとき、herokuはあなたに次のようなヒントを与えます。your region specified is wrong and should be xxx

そして、あなたは今地域を埋める方法を知っています:)

以下は私のために働きます:

CarrierWave.configure do |config|
  config.fog_credentials = {
      provider:              'AWS',                        # required
      aws_access_key_id:     ENV['S3_KEY'],                        # required
      aws_secret_access_key: ENV['S3_SECRET'],                        # required
      region:                'ap-southeast-1',                  # optional, defaults to 'us-east-1'

  }
  config.fog_directory  = 'your_bucket_name'                          # required
  config.fog_public     = false                                        # optional, defaults to true
  config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } # optional, defaults to {}
end

Gemfile:

gem 'carrierwave', '0.10.0'
gem 'fog', '1.36.0'
于 2016-10-09T16:52:22.270 に答える