Question

Je déploie l'environnement de production de mon application Ruby on Rails avec la gemme Capistrano sur un serveur privé virtuel.J'exécute la commande suivante pour déployer :

bundle exec cap production deploy

Tout semble bien fonctionner à moins que j'essaie de vérifier dans quel environnement fonctionne ma version de production actuelle.

Une façon que j'utilise pour vérifier cela est d'exécuter :

rails console
Rails.env

La réponse que je reçois est « développement », ce qui est assez effrayant.

Lors d'un autre test :lorsque j'exécute ce qui suit dans ma version actuelle :

rails db

J'obtiens une erreur indiquant que mydatabase_development n'est pas créé.

Mon application semble bien fonctionner mais je ne sais pas si cela posera des problèmes majeurs à l'avenir.Tout d'abord:Existe-t-il un moyen de déterminer si ma Live Copy est réellement en cours de développement ?Deuxièmement:Étant donné que j'ai un problème, comment configurer Capistrano pour déployer un environnement de production ?

Était-ce utile?

La solution

Garde en tête que rails console s’engage dans l’environnement actuel tel que dicté par RAILS_ENV ou RACK_ENV dans votre environnement.Si vous ne le configurez pas explicitement sur votre serveur, il sera probablement défini par défaut sur development.

Une façon de résoudre ce problème est de le forcer dans votre .bash_profile ou quel que soit le profil shell que vous utilisez.Par exemple:

export RAILS_ENV=production

Cela devrait le rendre disponible et lorsque vous engagerez votre shell Rails, il démarrera correctement.

Pour rappel, vous ne devriez même pas pouvoir démarrer en mode développement sur votre serveur de production puisqu'il ne devrait pas y avoir d'entrée portant ce nom dans config/database.yml.Une bonne pratique consiste à stocker config/database.yml seulement sur le serveur de production et déplacez-le lors de votre déploiement Capistrano.

Ajoutez ceci à votre config/deploy.rb:

set :linked_files, %w[
  config/database.yml
]

Ensuite, vous créez une configuration de production uniquement dans shared/config/database.yml qui sera mis en place lors de votre déploiement.Assurez-vous d'exclure config/database.yml depuis votre système de contrôle de version afin qu'il ne soit pas déployé.

La raison pour laquelle votre site fonctionne probablement bien est qu'un lanceur comme Passenger définit automatiquement RACK_ENV à production sauf configuration contraire.Cela n'a cependant pas d'impact sur votre shell, qui est par défaut development.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top