web-dev-qa-db-fra.com

Variables de configuration multilignes dans Heroku

J'ai une application Rails qui charge un certain nombre de certificats RSA avant d'effectuer une transaction avec Paypal. Sur ma machine de développement, ces certificats sont lus à partir de fichiers du système de fichiers, mais comme Heroku (que j'utilise pour le traitement) est en grande partie en lecture seule, je ne peux pas télécharger ces fichiers, je suppose donc que je devrais lit les certificats à partir des variables de configuration (voir Heroku Config Vars ).

Comme les certificats sont constitués de plusieurs lignes de données, je ne sais pas comment les définir en tant que variables ni même si cela est possible. Est-ce que quelqu'un sait comment je pourrais faire cela ou être capable de suggérer une approche alternative?

Merci beaucoup, Eddie

43
Eddie Johnston

J'ai trouvé qu'un moyen simple d'ajouter des configurations multi-lignes consiste à les citer en double, puis à les répercuter dans mon environnement local.

heroku config:add EC2_PRIVATE_KEY="$EC2_PRIVATE_KEY"
50
danmayer

Nous devions faire la même chose.

Vous pouvez envelopper la valeur de la variable entre guillemets:

bobvila@bobuntu:~/svnroot/app/myapp$ heroku config:add woodchuck="How much wood
> could a woodchuck chuck
> if a woodchuck could chuck wood"
Adding config vars and restarting myapp... done, v25
woodchuck: How much wood
could a woodchuck chuck
if a woodchuck could chuck wood
bobvila@bobuntu:~/svnroot/app/myapp$ heroku config
=== Config Vars for myapp
woodchuck:                       How much wood
could a woodchuck chuck
if a woodchuck could chuck wood
bobvila@bobuntu:~/svnroot/app/myapp$ 

Si vous utilisez Foreman pour le développement localhost, le fichier .env ne prend pas en charge les variables multilignes. Vous devez donc l'exporter vers le shell avant de lancer Foreman.

9
daveespo

Si vous souhaitez définir les valeurs de configuration Heroku à partir du contenu de votre fichier, vous pouvez utiliser le tour de passe suivant:

$ heroku config:set SECRET_KEY="$(cat path/to/secret.key)"

Les valeurs multilignes peuvent être définies directement en mettant des guillemets autour de la valeur:

$ heroku config:set SECRET_KEY='first line
> second line'

Si vous utilisez Foreman pour une exécution locale (maintenant heroku local), il ne prend pas en charge les variables multilignes. Vous devez d'abord utiliser quelque chose pour les injecter dans l'environnement, tel que envdir :

$ envdir my-env-dir heroku local
8
Judy2K

Ou vous pouvez simplement aller dans l'onglet Paramètres du tableau de bord Heroku, ouvrir Config Vars et le coller dans.

 Heroku Settings

Peasy facile.

6
James Gentes

Ma réponse arrive un peu tard, mais j'ai eu le même problème récemment avec env multi-ligne. variables sur Heroku. Ma solution consistait à utiliser strict_encode64:

encoded_secret = Base64.strict_encode64("my_multi_line_secret")

ajouter la clé:

$ heroku config:set SECRET_KEY='the encoded_secret string here'

Dans le code, vous le décodez ensuite avec Base64.strict_decode64(ENV['SECRET_KEY'])

3
paulld

Un exemple de la façon de traiter ce problème avec NodeJS. Désinfectez la valeur en remplaçant les caractères \\n par \n:

process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')

Tiré de: Problème échappé avec firebase privateKey en tant que variable de configuration Heroku

1
Eugene Kulabuhov