当前位置: 首页 > 知识库问答 >
问题:

heroku-缺少必需的参数:aws\u访问\u密钥\u id、aws\u机密\u访问\u密钥,遵循Hartl教程

濮书
2023-03-14

运行heroku run rake db:migrate,我得到以下错误:缺少必需的参数:aws\u access\u key\id、aws\u secret\u access\u key

我做了问题25596504中建议的更正,特别是更改了文件载波。rb载波电波。rb运气不好。我遵循Hartl教程第688页,该页指定将它们添加为$heroku config:set S3\u ACCESS\u KEY=


共有3个答案

钱修雅
2023-03-14

我认为发生此错误是因为var名称不匹配。

在卡里尔瓦夫。rb,您应该用前缀“aws”替换:s3_access_key_id和:s3_secret_access_key。


    if Rails.env.production?
        CarrierWave.configure do |config|
        config.root = Rails.root.join('tmp')
        config.cache_dir = 'carrierwave'

        config.fog_credentials = {
          # Configuration for Amazon S3
          :provider               => 'AWS',                        # change var's name
          :aws_access_key_id      => ENV['S3_ACCESS_KEY'],         # change var's name
          :aws_secret_access_key  => ENV['S3_SECRETE_KEY']
        }
        config.fog_directory     =  ENV['S3_BUCKET']
      end
    end

而且它可以被部署。

充高扬
2023-03-14

这是我在让AWS与Heroku一起工作了很长时间之后制作的一个教程,正如MichaelHartl在RubyonRails教程第11章中所描述的那样。我希望这有助于:

让Rails教程示例应用程序在Heroku和AWS之间工作是一个巨大的麻烦。但是我做到了。如果你找到了本教程,这意味着你可能遇到了一个无法克服的错误。那很好。我有几个。

你需要做的第一件事是回顾哈特尔提供的代码。请确保您完全按照所示输入(或复制/粘贴)。在本节的所有代码中,您可能只需要添加一个小代码。“区域”环境变量。如果您创建的存储桶不在默认的美国区域中,则需要这样做。稍后会有更多关于这个的信息。下面是/config/初始化器/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

该行:区域=

您应该完全按照所示的方式使用该代码块。不要把你的实际钥匙在那里。我们会把他们分开送到Heroku

现在让我们转到您的AWS帐户和安全性。

  1. 首先,创建您的AWS帐户。在大多数情况下,这就像注册任何网站一样。制作一个漂亮的长密码并将其存储在安全的地方,比如加密密码管理器。当您创建帐户时,您将获得第一套AWS密钥。在本教程中,您将不会使用这些工具,但在将来的某个时候您可能需要它们,所以也请将它们保存在安全的地方
  2. 转到S3部分,制作一个铲斗。它必须有一个唯一的名字,所以我通常只把日期放在末尾,这样就可以了。例如,您可以将其命名为“my-sample-app-bucket-20160126”。创建bucket后,单击名称,然后单击属性。对你来说,知道你的桶所在的“区域”是很重要的。找到它,并记下来。你以后会用的
  3. 您的主帐户可能拥有对所有内容的完全权限,所以我们不要将其用于在两个web服务之间传输随机数据。如果它泄露出去,你可能要花很多钱。我们将使用有限的用户。在IAM部分创建新用户。我把它命名为“fog”,因为它是处理发送和接收的云服务软件。创建时,可以选择显示和/或下载与新用户关联的密钥。把它放在一个安全的地方是很重要的。它不会进入您的代码中,因为这可能会在其他人可以看到它的存储库中结束。另外,不要给这个新用户密码,因为它不会登录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/*"
            ]
        }
    ]
}

这就是AWS配置。我不需要制定允许“雾”列出桶中内容的策略,尽管我尝试的大多数教程都说这是必要的。我认为只有当你想要一个可以通过仪表板登录的用户时才有必要。

现在是Heroku配置。这些东西在你的命令提示符下输入,就像'heroku run rake db:迁移'之类的。这是您输入从先前创建的“雾”用户那里获得的实际访问密钥和秘密密钥的地方。

$ 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

再看最后一个。还记得你看S3桶的属性吗?在此输入与区域关联的代码。如果您的桶不在俄勒冈州,您将不得不将us-West-2更改为您的实际区域代码。编写本教程时,此链接起作用:

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

如果这不起作用,谷歌“AWS S3区域代码”。

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

景星光
2023-03-14

进入Heroku,进入应用程序,进入设置,点击显示配置变量。

单击右侧的“编辑”,然后在此处输入您的秘密:

S3_BUCKET: name of your bucket goes here
S3_ACCESS_KEY: xxxxx
S3_SECRET_KEY: xxxx

在配置/初始化器/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
 类似资料:
  • 我使用PuTTY密钥生成器生成了一个4096位RSA-2密钥,其中包含一个密码短语。 我保存了. ppk和一个openSSL格式的公钥。油灰格式公钥不起作用。 无论如何,我的错误如下: 有什么问题吗? 我使用Pageant来加载密钥,我使用Git Bash来尝试ssh连接。我也把密钥加载到GitHub,不知道我做错了什么。 我尝试在GitHub中添加新行,但没有添加新行

  • 密码\u默认值和密码\u BCRYPT之间有什么区别?他们都使用河豚加密算法吗?算法的成本是多少?如何在PHP中设置密码\u散列生成255个散列长度而不是60个?

  • 我正在与CheckMarx漏洞之一作斗争。我需要一些指导来支持这一点。以下是我的代码: 这里con是(HttpurlConnection)新URL(“一些URL”)。openConnection()。 所以,checkmarx在《in》中强调了这个问题。readLine()。 我尝试的变通方法: 1: StringEscape eUtils.unescapeJson(in.readLine()),

  • 我正在使用“BouncyCastle.NetCore”和“JoseJwt”库对web令牌进行签名和加密。我可以通过以下代码使用私钥签名。但要求也要执行OpenID JWT加密,以便加密JWT有效负载,我们需要使用提供的公钥字符串(使用X509密钥规范解码的base64)进行加密。使用RSA算法和JWE标头所需的编码应包括标头名称“alg”,值为:RSA\u OAEP\u 256。以下代码仅使用私钥

  • 我最近正在研究文件加密/解密。 当我尝试用相同的密钥解密文件时,总是会发生EVP_CipherFinal_ex。 代码片段将在下面发布。 我做错什么了吗? 谢谢你的帮助。 加密 解密 顺便说一句:当我使用CipherInputStream/CipherOutStream时,它会正常工作。我想知道是否可以只使用FileInputStream/FileOutputStream?非常感谢。 编辑:加密功

  • 我试图编译代码时遇到了这个异常。我已经安装了eclips工具包,我正在使用EclipseKepler 异常线程"main"java.lang.NoClassDefFoundError: org/apache/共用/日志/LogFactory在com.amazonaws.Amazon WebServiceClient.(Amazon WebServiceClient.java:56)在test_to