这是我经过大量工作让 AWS 与 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
:region => ENV['S3_REGION'] 这一行对很多人来说都是个问题。随着您继续本教程,您将了解它的用途。
您应该完全按照所示使用该代码块。 不要将您的实际密钥放在那里。我们会单独将它们发送到 Heroku。
现在让我们继续讨论您的 AWS 账户和安全问题。
- 首先,创建您的 AWS 帐户。 在大多数情况下,这就像注册任何网站一样。制作一个漂亮的长密码并将其存储在安全的地方,例如加密的密码管理器。当您创建帐户时,您将获得第一组 AWS 密钥。您将不会在本教程中使用它们,但您将来可能会需要它们,因此请将它们保存在安全的地方。
-
转到 S3 部分并制作一个桶。它必须有一个唯一的
名字,所以我通常只是把日期放在最后就可以了。例如,您可以将其命名为“my-sample-app-bucket-20160126”。一旦您
已创建您的存储桶,单击名称,然后单击属性。
了解您的存储桶所在的“区域”对您很重要。找到它,
并记下它。稍后您将使用它。
- 您的主帐户可能对所有内容都具有完全权限,因此我们不要使用它在两个 Web 服务之间传输随机数据。如果它出去了,这可能会花费你很多钱。我们将改为限制用户。 在 IAM 部分创建一个新用户。我将其命名为“雾”,因为这是处理发送和接收的云服务软件。创建它时,您可以选择显示和/或下载与新用户关联的密钥。把它放在保险箱里很重要
和安全的地方。它不会进入您的代码,因为这可能会
最终在其他人可以看到的存储库中。另外,不要给这个
新用户一个密码,因为它不会登录到 AWS 控制面板。
- 创建一个新组。我称我为“s3railsbucket”。这就是
将分配权限。将“雾”添加到该组。
- 转到“策略”部分。单击“创建策略”,然后选择“创建您的
自己的政策”。给它一个以“允许”开头的名称,这样它就会显示在附近
政策列表的顶部。这是一个巨大的清单。这是我所做的:
策略名称: AllowFullAccessToMySampleAppBucket20160126
说明: 允许远程写入/删除访问名为
my-sample-app-bucket-20160126。
政策文件:
{
"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: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
再看看最后一个。记得当你看到的属性
你的 S3 存储桶?您可以在此处输入与您的相关联的代码
地区。如果您的存储桶不在俄勒冈州,则必须将 us-west-2 更改为您的实际区域代码。此链接在编写本教程时有效:
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
如果这不起作用,请谷歌“AWS S3 区域代码”。
在完成所有这些并仔细检查代码中的错误之后,我得到了
Heroku 与 AWS 合作存储图片!