LocationsController中的AWS :: Errors :: MissingCredentialsError创建使用paperclip和aws Gem

时间:2014-01-29 02:52:02

标签: ruby-on-rails amazon-web-services amazon-s3

我在LocationsController中使用paperclip和AWS gem获取以下错误 AWS :: Errors :: MissingCredentialsError

关于例外的更多细节:

Missing Credentials. Unable to find AWS credentials. 
You can configure your AWS  credentials a few different ways: 
* Call AWS.config with :access_key_id and :secret_access_key 
* Export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to ENV * 

我目前正在我的机器上的开发环境中运行此代码这是 development.rb

  Gmaps::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :strict

  # Log the query plan for queries taking more than this (works
  # with SQLite, MySQL, and PostgreSQL)
  config.active_record.auto_explain_threshold_in_seconds = 0.5

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

  # Amazon S3 settings for Paperclip uploads
Paperclip::Attachment.default_options.merge!({  
storage: :s3 ,
s3_credentials: {
  access_key_id:  ENV['key_id'],
  secret_access_key:  ENV['key'],
    bucket:  "#{ENV['bucket']}-#{Rails.env}"
    },
    url: ":s3_domain_url",
   path: "/:class/:attachment/:id_partition/:style/:filename"
    })
end

这是我的模特

class Location < ActiveRecord::Base
    geocoded_by :address
    after_validation :geocode

      has_attached_file :picture,
        :styles => { :medium => "300x300>", :thumb => "100x100>" }
end

感谢您花时间看看这个

3 个答案:

答案 0 :(得分:3)

显然没有找到您的S3凭据。我在Paperclip文档中找不到任何地方,它说你应该在应用程序配置中指定你的S3凭证。

通常,您可以将其放在如下所述的模型中:

http://rubydoc.info/gems/paperclip/Paperclip/Storage/S3

有几个与此相关的线程可能有所帮助:

AWS::Errors::MissingCredentialsError using paperclip and aws-s3 in rails 3.1

Troubles setting up Paperclip + AWS S3 for image storing in our Rails3/Heroku App

答案 1 :(得分:0)

尝试仅使用AWS Gem

我希望您尝试仅使用AWS Gem配置并查看凭据是否有效:

配置/初始化/ aws.rb

# Make the connection.
AWS.config(
  access_key_id:      ENV['key_id'],
  secret_access_key:  ENV['key'] )

S3 = AWS::S3.new.buckets[ 'your-bucket-name' ]

然后打开控制台并尝试以下操作:

bundle exec rails c
S3.objects.first

输出是什么?

基本上,先让它工作,然后再处理Paperclip Gem的抽象。

答案 2 :(得分:-1)

对我来说,修复是在我的gemfile中重新排列我的宝石的顺序:

gem 'aws-sdk'必须在gem 'paperclip'

之前

:此:

gem 'aws-sdk'
gem 'paperclip'

不是这样:

gem 'paperclip'
gem 'aws-sdk'

幸运地发现了这一点。