J'hébergerai mon application RoR API dans Google App-Engine.

Tout fonctionne jusqu'à présent, mais je dois stocker les noms d'utilisateur, les mots de passe et les clés (par exemple, utilisateur / mot de passe de la base de données) en texte brut dans le app.yaml. c'est juste stupide, donc je ne pourrai jamais pousser ça vers mon dépôt git! Habituellement, je stocke des éléments comme celui-ci dans une variable env et je les utilise dans mon application.

Mais je n'ai pas trouvé de moyen de définir ou d'accéder aux variables d'environnement.

Y a-t-il un moyen ou une alternative pour le faire?

2
Zero Soul Eater 20 nov. 2018 à 17:50

3 réponses

Meilleure réponse

Je l'ai fait!

Pour le développement local, je règle simplement mon environnement comme d'habitude.

Si le mode est Production, je les charge depuis le Google Datastore toutes les paires de valeurs-clés et définissez-les comme une variable d'environnement.

Je fais cela dans un initialiseur, pour ce faire, il suffit de créer un fichier dans YourApp/config/initializers/ et d'y mettre le code! Créez simplement de nouvelles entités, copiez le nom du type dans le code et définissez l'ID de votre projet. Comme votre application est hébergée sur Google, elle doit avoir accès au magasin de données (vous devez définir le droit dans le gestionnaire IAM)

require "google/cloud/datastore"
# Load the enviroment variables from the google datastore!
if Rails.env == "production"

  data_store = Google::Cloud::Datastore.new(
      project_id: 'YOUR_PROJECT_ID'
  )

  query = data_store.query "YOUR_KIND_NAME"
  results = data_store.run query

  puts "Set custom env variables!"
  # Set each result as an env variable
  results[0].properties.to_h.each do |key, value|
    ENV[key]= value
  end

end
3
Zero Soul Eater 11 déc. 2018 à 14:52

Comme mentionné dans Bonnes pratiques pour la gestion des informations d'identification, vous pouvez utiliser une variable d'environnement pointant aux informations d'identification en dehors du code source de l'application, telles que Cloud Key Management Service. Je recommande également de jeter un œil à Gestion des secrets avec la documentation Cloud KMS qui explique solutions lorsque vous choisissez une gestion secrète.

1
Katayoon 20 nov. 2018 à 23:51

Vous pouvez accéder aux variables env dans votre fichier de configuration, la syntaxe erb est prise en charge.

Par exemple:

production:
  database: <%= ENV['DB_HOST'] %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASS'] %>

Il ne vous reste plus qu'à configurer ces variables d'environnement dans Google App Engine.

0
mbuechmann 21 nov. 2018 à 07:40