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:
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.
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.
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.