S3 / Paperclip在Heroku上工作但不在Localhost上工作

时间:2012-08-01 13:42:11

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

Paperclip非常适合Heroku上的应用程序,但我似乎无法让它在本地运行。每当我尝试做某事时,我都会得到“缺少必需品:桶选项”......但是桶就在那里,它适用于Heroku!

如果有帮助,这是我的模型:

  has_attached_file :screen_one, :styles => { :medium => "800x600>", :thumb => "110x80#" },
  :storage => :s3,
  :s3_credentials => {
    :access_key_id => ENV['accesskeyishere'],
    :bucket => ENV['sitebuilderreport'],
    :secret_access_key => ENV['secretaccesskeyishere']
  }

我已经更改了访问密钥,因为这是一个公开帖子:)

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题(缺少:每个地方都有桶)。以下答案在我的案例中完美无缺。

一个。将这些添加到 .bash_profile (注意:填写您的亚马逊帐户凭据)

export AWS_ACCESS_KEY_ID=XXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXX
export AWS_BUCKET=XXXXXXXXXX

湾这是我的 development.rb (注意:复制并粘贴而不更改任何内容)

Paperclip.options[:command_path] = "/usr/local/bin/"

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['AWS_BUCKET'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
}

请务必使用最新的回形针和aws-s3宝石重新绑定您的Rails应用。此外,请确保退出终端并再次运行所有内容,因为这是对.bash_profile文件的更新。

我希望现在一切顺利。

答案 1 :(得分:2)

您应该在mac os中的用户 .bash_profile 中定义 ENV [] 变量。

您应该执行“heroku config”以查看S3的heroku环境键并在您当地的环境中进行定义。

例如:

$ heroku config

AWS_ACCESS_KEY_ID: your_S3_XXX_key<br />
AWS_SECRET_ACCESS_KEY: your_secret_XXX_key<br />
AWS_BUCKET: your_production_bucket<br />
DATABASE_URL: postgres://xxxxxxx<br />
[...]<br />

您应该在 .bash_profile 文件中复制access_key和secret:

export AWS_ACCESS_KEY_ID=your_S3_XXX_key<br />
export AWS_SECRET_ACCESS_KEY=your_secret_XXX_key
export AWS_BUCKET=your_development_bucket => "Specify new bucket for your dev environement".

答案 2 :(得分:1)

如果有人做了同样愚蠢的事情 - 并且创建了一个本地脚本来源导出所有AWS环境变量 - 请确保您在生成rails服务器的同一个Terminal会话中获取它!如果使用分割窗口(CMD SHIFT D),请记住,在一个窗口中获取适当的环境变量不会在另一个窗口中执行。非常愚蠢的错误,但我确信(或者至少是温和的希望)我不会是唯一一个犯错误的人。

答案 3 :(得分:0)

您也可以简单地使用(填写正确的值):

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => 'AWS_BUCKET',
      :access_key_id => 'AWS_ACCESS_KEY_ID',
      :secret_access_key => 'AWS_SECRET_ACCESS_KEY'
    }
}

答案 4 :(得分:0)

我有同样的问题,我有config / application.yml(不确定它是遗留的东西还是它来自哪里)但是这允许在rails&#39; codebase&#39;中设置环境变量。我忘了它在这里,在heroku中被忽略并且覆盖了一些没有set.doh的设置!