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.rb到carrierwave.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账户和安全性.
策略名称: 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)
这就是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合作存储图片!