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?
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"]
.
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.
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.
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
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 "
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.