heroku - 缺少必需的参数:aws_access_key_id,aws_secret_access_key,遵循Hartl教程

use*_*682 7 ruby-on-rails heroku

跑步heroku run rake db:migrate,我得到这个错误:Missing required arguments: aws_access_key_id, aws_secret_access_key.

我做的SO问题25596504推荐的修正,特别是改变文件carrier_wave.rbcarrierwave.rb没有运气.我正在关注Hartl教程页面688,它指定添加它们,因为$heroku config:set S3_ACCESS_KEY=<access key> 我用实际键的引用和非引用版本替换了''.当我运行heroku配置时,键显示,例如,S3_ACCESS_KEY:

应用程序在我开始处理本教程的第11.4节(重新上传图像)之前工作.顺便说一下,我知道费加罗的宝石; 但是,我想尝试按照教程的方法.我错过了什么?任何想法将不胜感激.谢谢!

neo*_*neo 15

继续Heroku,在您的应用程序上,转到设置,点击Reveal Config Vars.

点击右侧的编辑,然后在那里输入您的秘密:

S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx
Run Code Online (Sandbox Code Playgroud)

在config/initializers/carrierwave.rb或您输入密码的任何地方都应该:

CarrierWave.configure do |config|
  config.root = Rails.root.join('tmp') # adding these...
  config.cache_dir = 'carrierwave' # ...two lines

  config.fog_credentials = {
    :provider               => 'AWS',                        # required
    :s3_access_key_id      => ENV['S3_ACCESS_KEY'],                        # required
    :s3_secret_access_key  => ENV['S3_SECRET_KEY'],                     # required
    :region                 => 'eu-west-1',                  # optional, defaults to 'us-east-1'
    :host                   => 's3.example.com',             # optional, defaults to nil
    :endpoint               => 'https://s3.example.com:8080' # optional, defaults to nil
  }
  config.fog_directory  = ENV['S3_Bucket']                             # required
  config.fog_public     = false                                   # optional, defaults to true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end
Run Code Online (Sandbox Code Playgroud)


Max*_*der 12

这是我在使用Heroku工作的大量工作之后的教程,如Michael Hartl的Ruby on Rails教程的第11章所述.我希望它有所帮助:

获取Rails教程示例应用程序在Heroku和AWS之间工作是一个巨大的痛苦.但我做到了.如果您找到了本教程,那意味着您可能遇到了一个无法通过的错误.没关系.我有几个.

您需要做的第一件事是回顾一下Hartl提供的代码.确保您完全按照所示键入(或复制/粘贴).在本节中的所有代码中,您可能只需要添加一个小的附加内容."区域"环境变量.如果您创建的存储桶不在默认的美国区域中,则需要这样做.稍后会详细介绍.这是以下代码/config/initializers/carrier_wave.rb:

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :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
Run Code Online (Sandbox Code Playgroud)

这条线:region => ENV['S3_REGION']对很多人来说都是个问题.当您继续本教程时,您将了解它的用途.

您应该完全按照所示使用该代码块.不要把你的实际钥匙放在那里.我们将分别发送给Heroku.

现在让我们转到您的AWS账户和安全性.

  1. 首先,创建您的AWS账户.在大多数情况下,这就像注册任何网站.制作一个很好的长密码并将其存储在安全的地方,就像加密的密码管理器一样.当您创建帐户时,您将获得第一组AWS密钥.您将不会在本教程中使用它们,但是您可能在将来的某个时候需要它们,因此请将它们保存在安全的地方.
  2. 转到S3部分并制作一个桶.它必须有一个唯一的名称,所以我通常只把日期放在最后,这就是它.例如,您可以将其命名为"my-sample-app-bucket-20160126".创建存储桶后,单击名称,然后单击"属性". 了解你的水桶所处的"区域"非常重要.找到它并记下它.你稍后会用它.
  3. 您的主帐户可能拥有对所有内容的完全权限,因此不要使用它来在两个Web服务之间传输随机数据.如果它出来,这可能会花费你很多钱.我们将改为限制用户.在IAM部分中创建一个新用户.我把它命名为"雾",因为那是处理发送和接收的云服务软件.创建它时,您可以选择显示和/或下载与新用户关联的键.将它保存在安全可靠的地方非常重要.它不会进入您的代码,因为这可能最终会在其他人可以看到它的存储库中.此外,不要为此新用户提供密码,因为它不会登录AWS仪表板.
  4. 组建一个新组.我称之为"s3railsbucket".这是分配权限的位置.在此组中添加"雾".
  5. 转到"政策"部分.单击"创建策略",然后选择"创建自己的策略".给它一个以"允许"开头的名称,这样它就会显示在策略列表的顶部附近.这是一个巨大的清单.这是我做的:

策略名称: AllowFullAccessToMySampleAppBucket20160126
说明:允许对名为my-sample-app-bucket-20160126的S3存储桶进行远程写入/删除访问.
政策文件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-sample-app-bucket-20160126",
                "arn:aws:s3:::my-sample-app-bucket-20160126/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)
  1. 返回"组"部分,选择您创建的组,然后将新策略添加到组中.

这就是AWS配置.我不需要制定一个允许"雾"列出存储桶内容的策略,即使我尝试的大多数教程都说是必要的.我认为只有当您希望用户可以通过仪表板登录时才有必要.

现在为Heroku配置.这些东西会在命令提示符下输入,就像'heroku run rake db:migrate'等.您可以在此处输入从之前创建的"雾"用户获得的实际访问密钥和密钥.

$ heroku config:set S3_ACCESS_KEY=THERANDOMKEYYOUGOT  
$ heroku config:set S3_SECRET_KEY=an0tHeRstRing0frAnDomjUnK  
$ heroku config:set S3_REGION=us-west-2  
$ heroku config:set S3_BUCKET=my-sample-app-bucket-20160126
Run Code Online (Sandbox Code Playgroud)

再看看最后一个.还记得您查看S3存储桶的属性吗?您可以在此处输入与您所在地区相关联的代码.如果您的水桶不在俄勒冈州,则必须更改us-west-2为您的实际区域代码.编写本教程时,此链接有效:

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

如果这不起作用,Google"AWS S3区域代码".

完成所有这些并仔细检查代码中的错误后,我让Heroku与AWS合作存储图片!