2016-12-13 6 views
4

Ich verstehe, dass es andere Fragen gibt, die gleich sind, aber sie haben mein Problem nicht gelöst.fehlende Region; Verwenden Sie: Region-Option oder Export-Region-Name zu ENV ['AWS_REGION']

ich beim Empfang der Fehler halten: Aws::Errors::MissingRegionError in BooksController#create,

missing region; use :region option or export region name to ENV['AWS_REGION']. Dies ist jedoch meine Konfiguration in meinem

Development.rb:

config.paperclip_defaults = { 
     storage: :s3, 
     s3_host_name: "s3-us-west-2.amazonaws.com", 
     s3_credentials: { 
      bucket: ENV['AWS_BUCKET'], 
      access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
      s3_region: ENV['us-west-2'] 
     } 

    } 

Production.rb:

config.paperclip_defaults = { 
     storage: :s3, 
     s3_host_name: "s3-us-west-2.amazonaws.com", 
     s3_credentials: { 
      bucket: ENV['AWS_BUCKET'], 
      access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
      s3_region: ENV['us-west-2'] 
     } 

    } 

Und application.rb:

config.paperclip_defaults = { 
     storage: :s3, 
     s3_host_name: "s3-us-west-2.amazonaws.com", 
     s3_credentials: { 
      bucket: ENV['AWS_BUCKET'], 
      access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
      s3_region: ENV['us-west-2'] 
     } 

    } 

Aber es hält mit dem Fehler kommen. Ich habe den Rat anderer Leute aus anderen Fragen befolgt. Hoffe jemand kann helfen.

Ben

+0

Nö, gleichen Fehler. – Benjamints

+0

Versuchen Sie, s3_region-Schlüssel außerhalb von s3_credentials-Hash zu setzen. Auf derselben Ebene wie s3_host_name. –

Antwort

7

sollten Sie entweder setzen Sie die ENV['AWS_REGION'] env Variable "us-west-2" und verwenden Sie es als

s3_region: ENV['AWS_REGION'] 

oder eine Zeichenfolge verwenden:

s3_region: 'us-west-2' 

Auch sollte s3_region Option bewegt mich von credentials Hash in config/environments/{development|production}:

config.paperclip_defaults = { 
    storage: :s3, 
    s3_host_name: "s3-us-west-2.amazonaws.com", 
    s3_region: 'us-west-2', # or ENV['AWS_REGION'] 
    s3_credentials: { 
    bucket: ENV['AWS_BUCKET'], 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    } 
} 
+0

Danke, ich habe versucht, die S3-Region außerhalb meines Hash zu bewegen, aber immer noch ohne Erfolg, es hat nicht funktioniert. – Benjamints

+0

Es in s3_region ändern: 'us-west-2' hat funktioniert! Ohne die ENV. Vielen Dank! – Benjamints

-1

eine Datei erstellen genannt:

config/initializers/paperclip.rb 

und fügen Sie die folgenden Schritte aus:

Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' 
Paperclip::Attachment.default_options[:s3_host_name] = 's3-eu-west-1.amazonaws.com' 

Und in der dritten Zeile, wo ich eu-west-1 ersetzen, dass je nach Region Sie in sind

1

Rails 5 Way.

nach aktualisierter Dokumentationsregion ist notwendig. wo es notwendig war für nicht us-region. und die empfohlene Methode zur Einrichtung paperclip mit s3 ist:

  1. setzen Sie Ihre geheime Informationen in yml Datei sagen wir aws.yml (muss ignoriert git werden)
  2. setzen Sie Ihre globale Konfigurationen in Umwelt-Dateien, dh development/production.rb in config/environments/
  3. legen Sie Ihre Dateieinstellungen im Modell.in meinem Fall bin Definieren I Bildeigenschaften in User Modell

Beispiel Schritt 1: (config/aws.yml)

development: 
    access_key_id: AWS_ACCESS_KEY_ID # without quotation marks 
    secret_access_key: AWS_SECRET_KEY_ID # without quotation marks 

production: 
    access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> # get it from terminal environment 
    secret_access_key: <%= ENV["AWS_SECRET_KEY_ID"] %> # get it from terminal environment 

Beispiel Schritt 2: (config/environments/development.rb)

# US West (N. California) us-west-2 apigateway.us-west-2.amazonaws.com HTTPS 

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_region => 'us-west-2', 
    :bucket => 'production-bucket', 
    :path => '/:class/:attachment/:id_partition/:style/:filename', 
    :s3_credentials => "#{Rails.root}/config/aws.yml", 
} 

Beispiel Schritt-3: (app/models/user.rb)

has_attached_file :avatar, styles: { medium: "300x300>", thumb: "100x100>" } 
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\z/ 

schließlich können Sie Datei hochladen:

def upload_to_s3 
    response = {JSON_KEY_STATUS_MESSAGE: "OK", server_time: DateTime.current.to_i} 
    response[:user] = [] 
    response[:status] = '0' 

    unless params[:avatar].present? 
     response[:message] = 'either user avatar image file [avatar]' 
     render json: response and return 
    end 

    begin 
     user = User.new # create new user 
     user.avatar = params[:avatar] # params[:avatar] is a file posted by form in mutli-part true over json api 
     s = user.save # save it # will through error if you have more than one required attributes 
     if(s != false) 
      response[:message] = 'file Successfully upload to s3' 
     else 
      response[:message] = 'fail to upload file to s3' 
     end 
    rescue => e 
     response[:message] = e.message # this guy will help debug a lot! 
    end 
    render json: response and return 
end 
Verwandte Themen