web-dev-qa-db-ja.com

Rails.config.active_storage.serviceを読み込めません

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形式であることに感謝します。私は1つのスペースと1つのキーのタブを使用して遊んでいますが、これは違いを生んでいないようです。

ファイルを保存して閉じると、ターミナルは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]

私が間違っている可能性があることについて何か提案はありますか?

7
Simon Cooper

サーバーにmaster.keyファイルがないと思います。 config/master.keyのローカルリポジトリを確認してください(このファイルはデフォルトで.gitignoreに追加されます)。このファイルをサーバーに追加するか、ENV["Rails_MASTER_KEY"]を設定します。

7
Jhonathan A

これは、風呂六で私のために働いた。設定の構成変数にRails_MASTER_KEYをキーとして追加します

君に config/master.keyファイルをRailsアプリに追加し、herokuの値として文字のチェーンを追加します。

2
ispirett

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

サーバーを再起動して、もう一度アップロードしてください。

0
Abhi

同じエラーが発生しました。私の場合、問題はconfigsでもmaster.keyでもありませんでした。 Redis serverを起動すると、エラーが修正されました。 MacOSの場合:

$> redis-server
0

この問題を解決する別の方法(私にとってはうまくいきました)コンソールでrake secretを実行し、キーをconfigにコピーして、クラスタイプ内のapplication.rbを開きます。config.secret_key_base = "pasteレーキ分泌の出力 "

0

に入る config/environments/development.rbそしてこれがあることを確認してください:

config.active_storage.service = :local

config/environments/productionあるべき

config.active_storage.service = :Amazon

AmazonはAmazon S3用です。使用したいストレージサービスに変更できます。ストレージサービスとアクティブストレージの詳細については、Rails docsを参照してください。

0
don_Bigote