gpt4 book ai didi

ruby-on-rails - 如何为Hartl的Rails教程授予AWS用户权限

转载 作者:行者123 更新时间:2023-12-04 16:28:57 25 4
gpt4 key购买 nike

我不知道如何(或在何处)从AWS授予用户读写权限,以便用户可以在生产环境中的sample_app上发布图片。这是第11章的最后一项任务,本教程未涵盖,我也找不到任何解决方案。

这是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['lalala'],
:aws_secret_access_key => ENV['oloalle']
}
config.fog_directory = ENV['name of bucket']
end
end

这是教程中的过程:
1)创建AWS IAM用户并记录访问权限和 key -完成

2)创建S3存储桶-完成

3) 向上一步中创建的用户授予读写权限-怎样???

4)然后我运行这三个命令:
$ heroku config:set S3_ACCESS_KEY=lalala
$ heroku config:set S3_SECRET_KEY=oloalle
$ heroku config:set S3_BUCKET=name of bucket

5)推送到git和heroku-完成

6) heroku pg:reset DATABASE-完成

7) heroku run rake db:migrate,在这里我收到以下消息:
Running `rake db:migrate` attached to terminal... up, run.7906
rake aborted!
ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:244:in `validate_options'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:268:in `handle_settings'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/core/service.rb:98:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/fog-core-1.28.0/lib/fog/storage.rb:25:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:83:in `eager_load_fog'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:96:in `fog_credentials='
/app/config/initializers/carrier_wave.rb:3:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave/uploader/configuration.rb:118:in `configure'
/app/vendor/bundle/ruby/2.0.0/gems/carrierwave-0.10.0/lib/carrierwave.rb:14:in `configure'
/app/config/initializers/carrier_wave.rb:2:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:652:in `block in load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:651:in `load_config_initializer'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `block in <class:Engine>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:44:in `tsort_each_child'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/initializable.rb:54:in `run_initializers'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:352:in `initialize!'
/app/config/environment.rb:5:in `<top (required)>'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:328:in `require_environment!'
/app/vendor/bundle/ruby/2.0.0/gems/railties-4.2.0/lib/rails/application.rb:443:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

最佳答案

这是我创建的教程,以了解Michael Hartl在Ruby on Rails教程(第3版)第11章结尾处停下来的地方。它应该回答您的问题以及更多信息。
要使railstutorial.org示例应用程序在Heroku和AWS之间工作是一个巨大的难题。但是我做到了。如果找到了本教程,则意味着您可能会遇到无法逾越的错误。没关系。我有几个。

2020 Note: It's possible that everything here referencing a Region for S3 is no longer needed, or perhaps was never needed. When I originally got this all to work properly it was after adding the region information. However, S3 Buckets all share a global namespace. So if anybody is still reading this, try it all without the region stuff first, and leave a comment about whether it works or not. Anyway, back to the tutorial...


您需要做的第一件事是回顾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']这一行是一个问题。以后再说。
您应该完全按照所示使用该代码块。 不要将您的实际 key 放在那里。 我们将它们分别发送到Heroku。
如果必须添加该行代码,请不要忘记将其提交到git并将其推送到Heroku。
现在,让我们继续您的AWS账户和安全性。
  • 首先,创建您的AWS账户。 在大多数情况下,就像注册任何网站一样。制作一个不错的长密码并将其存储在安全的地方,例如加密的密码管理器。创建帐户时,将为您提供第一套AWS key 。您不会在本教程中使用它们,但是将来可能会需要它们,因此也请妥善保存。
  • 转到S3部分并创建一个存储桶。 它必须具有唯一性
    名称,所以我通常只是将日期放在结尾,然后就可以了。例如,您可以将其命名为“my-sample-app-bucket-20160126”。一旦您
    已经创建了存储桶,请单击名称,然后单击“属性”。
    重要的是,您要了解存储桶所在的“区域”。找到它,
    并记下它。稍后再使用。
  • 您的主帐户可能具有所有权限,因此,请勿将其用于在两个Web服务之间传输随机数据。如果解决的话,这可能会花费您很多钱。我们将改为限制用户。 在IAM部分中创建一个新用户。 我将其命名为“雾”,因为那是处理发送和接收的云服务软件。创建它时,您可以选择显示和/或取消与新用户关联的键。请务必将其安全保存
    和安全的地方。它不会进入您的代码,因为这可能会
    最终存放在其他人可以看到的存储库中。另外,不要给这个
    新用户输入密码,因为它将不会登录到AWS仪表板。
  • 新建一个群组。我称我为“s3railsbucket”。这是
    权限将被分配。将“雾”添加到该组。
  • 转到“策略”部分。点击“创建政策”,然后选择“创建您的
    自己的政策”。以“允许”开头的名称将其显示在
    策略列表的顶部。这是一个巨大的 list 。这是我的工作:

  • 策略名称: AllowFullAccessToMySampleAppBucket20160126
    说明:允许远程写入/删除对名为的S3存储桶的访问
    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配置就是这样。我不需要制定政策允许
    即使我尝试了大多数教程,也可以使用“fog”列出存储桶的内容
    说那是必要的。我认为只有在需要用户时才需要
    可以通过仪表板登录。
    现在进行Heroku配置。这些东西输入到您的
    命令提示符,就像“heroku run rake db:migrate”之类。这是
    在此输入您从先前创建的“雾”用户那里获得的实际访问 key 和 secret key 。
    $ 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
    如果这不起作用,请使用Google“AWS S3地区代码”。
    完成所有这些操作并仔细检查代码中的错误后,我得到了
    Heroku与AWS一起存储图片!

    关于ruby-on-rails - 如何为Hartl的Rails教程授予AWS用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465206/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com