web-dev-qa-db-fra.com

Production manquante secret_key_base dans rails

J'ai récemment déployé une application et j'ai obtenu une erreur de serveur interne en raison de la production de secret_key_base manquante. Après des heures de test, j'ai réussi à résoudre ce problème avec deux méthodes:

Méthode 1:

J'ai généré une nouvelle clé secrète avec rake secret et l'a remplacé par <%= ENV["SECRET_KEY_BASE"] %> dans secrets.yml. Déployé à nouveau l'application et cette fois, cela a fonctionné. Mais je pense que cette méthode est fausse.

Méthode 2:

J'ai généré une nouvelle clé secrète avec rake secret et l'a ajouté à environments/production.rb comme config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************, sans changer secrets.yml (la valeur par défaut est production: <%= ENV["SECRET_KEY_BASE"] %>). Déployé à nouveau l'application et cela fonctionne bien.

Mes questions:

  1. Quelle méthode est la meilleure?
  2. Si la 2ème méthode est correcte, pourquoi Rails ne génère pas de secret_key_base dans production.rb par défaut?
  3. Y a-t-il une autre méthode pour le faire?
31
user3631047

J'ai enfin trouvé la méthode correcte. Aucune des méthodes mentionnées en question n'est la bonne.

Méthode correcte:

Nous devons nous-mêmes générer une clé secrète (par rake secret) puis créez une variable d'environnement pour SECRET_KEY_BASE en exécutant la commande suivante à partir de l'invite de commande:

rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp

après avoir exécuté cette commande, connectez-vous à votre serveur via SSH et exécutez env afin que vous devriez voir votre SECRET_KEY_BASE dans la liste.

Maintenant, redémarrez votre application rhc app-stop myapp et rhc app-start myapp, Alors tu peux y aller.

30
user3631047

Si vous êtes sur une machine Ubuntu normale, mettez simplement export SECRET_KEY_BASE=" <<< output from rake secret here >>> " dans votre ~/.bashrc.

Courir source ~/.bashrc et redémarrez l'application.

5
FaZe Unempl0yedd

Il existe une autre option qui devrait être un peu plus sécurisée et qui consiste à l'ajouter au fichier de configuration Apache/Nginx. J'utilise Apache et je viens d'utiliser:

SetEnv SECRET_KEY_BASE my_secret

Ensuite, laissez simplement le fichier secrets.yml défini sur: production: <% = ENV ["SECRET_KEY_BASE"]%>

Pour un serveur Web de production, je ne suis pas sûr qu'il soit valide de supposer qu'un fichier .bashrc est exécuté et obtiendra votre jeu de variables ENV, mais je pense que cette façon est certaine de le définir. Je ne suis pas et expert donc prêt à avoir des risques ou des raisons pour lesquelles ce n'est pas une bonne idée m'a fait remarquer.

3
Nick Weavers