Paperclip中的AWS :: S3 :: MissingAccessKey,但我已经定义了两者

时间:2010-10-23 05:22:10

标签: ruby-on-rails amazon-s3 paperclip

我在Heroku上,这是一个投资组合的东西,我正在github上为潜在的雇主看,所以显然我不想把我的密钥放在S3.yml文件中。我已经在Heroku和我的机器上将S3_KEY和S3_SECRET导出到我的环境中,ruby可以访问它们。但是当我尝试上传时,它会给我以下错误:

AWS::S3::MissingAccessKey in Portfolio itemsController#update

You did not provide both required access keys. Please provide the access_key_id and the secret_access_key.

除了我的控制器行#之外,跟踪无关紧要,直到我尝试上传文件才能正常工作。这就是我所拥有的:

class Asset < ActiveRecord::Base
  attr_accessible :image, :image_file_name, :image_content_type, :image_file_size, :portfolio_item_id, :order

  has_attached_file :image,
    :styles => {
      :thumb => "100x100#",
      :small => "300x300",
      :large => "600x600>"
               },
    :storage => :s3,
    :s3_credentials => {
      :access_key_id => ENV["S3_KEY"],
      :secret_access_key => ENV["S3_SECRET"]
                       },
    :bucket => "bucketybucket",
    :path => "portfolio"

end

任何人都知道这里发生了什么?我如何构造这个哈希错误?

哦,我跟着这个帖子,没有骰子:Paperclip and Amazon S3 Issue

2 个答案:

答案 0 :(得分:1)

同样的问题......

似乎在加载模块之前没有加载ENV const。通过使用file参数解决  像这样

:s3_credentials => Rails.root.join('config/amazon_s3.yml')

和amazon_s3.yml

access_key_id: 'your_key'
secret_access_key: 'your_sec_key'
bucket: 'somebucket'

此外,您可以使用 heroku config:add 命令设置环境变量,该命令在Heroku DevCenter中描述

答案 1 :(得分:0)

问题是因为heroku中的Environment变量与系统中的环境变量不同,因此应用程序可能只在一个环境中工作