无法加载Rails.config.active_storage.service

时间:2018-07-06 08:41:40

标签: ruby-on-rails amazon-s3 rails-activestorage ruby-on-rails-5.2

我正在使用Active Storage并使用AWS托管生产中的图像来设置新的Rails 5.2应用程序。

但是,我在读取凭据时遇到问题:

2018-07-06T08:11:52.625415+00:00 app[web.1]: ! Unable to load application: Aws::Sigv4::Errors::MissingCredentialsError: Cannot load `Rails.config.active_storage.service`:
2018-07-06T08:11:52.625432+00:00 app[web.1]: missing credentials, provide credentials with one of the following options:
2018-07-06T08:11:52.625435+00:00 app[web.1]:   - :access_key_id and :secret_access_key
2018-07-06T08:11:52.625437+00:00 app[web.1]:   - :credentials
2018-07-06T08:11:52.625479+00:00 app[web.1]:   - :credentials_provider

这是现有的S3存储桶,我为此应用创建了一个新用户。我对CORS等感到满意。

在S3FullAccess组下设置用户。

我已经通过$EDITOR="atom --wait" rails credentials:edit

在我的应用程序中编辑了凭据

文件内容:

aws:
  access_key_id: [my access key]
  secret_access_key: [my secrect key]

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: [my secret key base]

请注意,这是YAML格式的,我使用过一个空格,并在键上使用了一个制表符,但这似乎没有什么不同。

当我保存并关闭文件时,终端将写入New credentials encrypted and saved.

我还安装了gem 'aws-sdk-s3', '~>1', require: false

和config / storage.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: eu-west-2
  bucket: [mybucket]

关于我可能做错了什么建议?

6 个答案:

答案 0 :(得分:4)

我认为您在服务器中缺少master.key文件。检查config/master.key中的本地存储库(默认情况下,此文件已添加到您的.gitignore中)。 将此文件添加到您的服务器或设置ENV["RAILS_MASTER_KEY"]

答案 1 :(得分:0)

解决此问题的另一种方法(对我有用) 在控制台中运行 rake secret 复制密钥 转到配置并打开application.rb 在类中输入: config.secret_key_base =“粘贴rake secrete的输出”

答案 2 :(得分:0)

进入config/environments/development.rb并确保您具有以下条件:

config.active_storage.service = :local

config/environments/production中,您应该拥有

config.active_storage.service = :amazon

amazon用于Amazon S3。可以将其更改为要使用的任何存储服务。有关存储服务和Active Storage的更多信息,请参见Rails文档。

答案 3 :(得分:0)

这在huroku上对我有用。在设置配置变量中,将RAILS_MASTER_KEY添加为密钥

在您的config/master.key文件中添加Rails应用程序,并将字符链添加为heroku中的值。

答案 4 :(得分:0)

在Rails 5.2中,执行以下操作:

步骤1。在config/storage.yml中添加

amazon:
  service: S3
  access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
  secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
  region: ap-south-1
  bucket: my-bucket

第2步:

Copy config/credentials.yml.example to config/credentials.yml

并在config/credentials.yml

中添加以下内容
  development:
    AWS_ACCESS_KEY_ID: YOUR-KEY
    AWS_SECRET_ACCESS_KEY: YOUR-SECRET
默认情况下,

credentials.yml已添加到.gitignore

第3步:

application.rb

取消注释以下内容:

# Load ENV variables from credentials.yml file
config.before_configuration do
  env_file = File.join(Rails.root, 'config', 'credentials.yml')
  YAML.load(File.open(env_file))[Rails.env].each do |key, value|
    ENV[key.to_s] = value
  end if File.exists?(env_file)
end

重新启动服务器,然后尝试再次上传。

答案 5 :(得分:0)

我有同样的错误。就我而言,问题既不是配置,也不是master.key。从Redis server开始修复了该错误。对于MacOS:

$> redis-server