web-dev-qa-db-fra.com

Impossible de charger Rails.config.active_storage.service

Je configure une nouvelle application Rails 5.2 utilisant Active Storage et utilisant AWS pour l'hébergement d'images en production.

Cependant, j'ai un problème avec l'application qui lit les informations d'identification:

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

Il s'agit d'un S3 Bucket existant que j'ai créé un nouvel utilisateur juste pour cette application. Je suis content du CORS etc.

L'utilisateur est configuré sous le groupe S3FullAccess.

J'ai modifié les informations d'identification dans mon application via $EDITOR="atom --wait" Rails credentials:edit

Le contenu du fichier:

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]

J'apprécie que c'est au format YAML, j'ai joué avec un espace et un onglet sur les touches, mais cela ne semble pas faire de différence.

Lorsque j'enregistre et ferme le fichier, le terminal écrit New credentials encrypted and saved.

J'ai aussi gem 'aws-sdk-s3', '~>1', require: false installée.

Et 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]

Des suggestions sur ce que je pourrais faire de mal?

7
Simon Cooper

Je pense que vous manquez le master.key fichier sur votre serveur. Vérifiez votre référentiel local dans config/master.key (ce fichier est ajouté à votre .gitignore par défaut). Ajoutez ce fichier à votre serveur ou définissez ENV["Rails_MASTER_KEY"].

7
Jhonathan A

Cela a fonctionné pour moi sur le huroku. Dans les paramètres config vars, ajoutez Rails_MASTER_KEY comme clé

en toi config/master.key fichier dans votre application Rails et ajoutez la chaîne de caractères comme valeur dans Heroku.

2
ispirett

Dans Rails 5.2, procédez comme suit:

Étape 1. Dans config/storage.yml ajouter

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

Étape 2:

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

et ajoutez ce qui suit dans config/credentials.yml

  development:
    AWS_ACCESS_KEY_ID: YOUR-KEY
    AWS_SECRET_ACCESS_KEY: YOUR-SECRET

credentials.yml est déjà ajouté à .gitignore par défaut.

Étape 3:

Dans application.rb

Décommentez les éléments suivants:

# 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

Redémarrez le serveur et essayez à nouveau de télécharger.

0
Abhi

J'ai eu la même erreur. Dans mon cas, le problème n'était ni avec les configurations, ni avec master.key. Démarrage Redis server a corrigé l'erreur. Pour MacOS:

$> redis-server
0
Yurii Verbytskyi

Une autre façon de résoudre ce problème (a fonctionné pour moi) Exécutez rake secret dans la console copiez la clé allez dans config et ouvrez application.rb dans le type de classe: config.secret_key_base = "paste la sortie de rake secrete "

0
Vadim Malakhovski

Allez dans config/environments/development.rb et assurez-vous d'avoir ceci:

config.active_storage.service = :local

dans config/environments/production tu aurais dû

config.active_storage.service = :Amazon

Amazon est pour Amazon S3. Il peut être modifié selon le service de stockage que vous souhaitez utiliser. Voir la documentation Rails pour plus d'informations sur les services de stockage et Active Storage.

0
don_Bigote