Réglage de l'Ruby on Rails environnement d'application à l'aide de Capistrano sur Phusion Passenger
J'ai 2 environnements, production et mise en scène, et je suis en utilisant Capistrano avec capistrano-ext gem.
Quand j'déployer pour mise en scène à l'aide de Capistrano et redémarrez passager, je voudrais que le déploiement de l'application à exécuter dans mise en scène cependant qu'il fonctionne dans le défaut production
J'ai essayé de réglage:
set :rails_env, "staging"
dans mon déployer recette, mais cela n'a eu aucun effet.
Je suis conscient de ce qui peut être fait par la configuration d'un hôte virtuel Apache, mais je suis à l'aide de l'hébergement mutualisé, donc ne pas avoir accès. Mon hôte offre ce conseil:
ajouter les éléments suivants à l'environnement.rb: ENV['RAILS_ENV'] = 'mise en scène'
mais cela ne veut pas m'aider à automatiser le processus avec Capistrano.
- Est ajout
ENV['RAILS_ENV'] = 'staging'
lui-même fonctionne? Si cela fonctionne, alors c'est juste une question de l'écriture d'un Capistrano recette pour automatiser cela. - Avez-vous essayé de demander à votre compagnie d'hébergement pour changer l'environnement pour vous? C'est la meilleure façon de résoudre ce problème. S'ils refusent de coopérer, vous pouvez tirer vos conclusions à leur sujet.
- Oui cela fonctionne, malade de regarder dans l'automatisation de Capistrano, merci.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un capistrano crochet pour créer des fichiers sur le serveur ou faire un lien symbolique dans, par exemple, le
shared/
lors du déploiement.Pour Les Rails 2.3:
Sur l'hébergeur de votre site web, créer le fichier
shared/preinitializer.rb
:Puis l'ajouter à votre
Capfile
(ou peut-êtreconfig/deploy.rb
si vous utilisez une version plus récente de capistrano avec 2 Rails.x:Pour Rails 3
En raison de changements dans Rails 3 de la séquence d'initialisation,
config/preinitializer.rb
n'est pas chargé jusqu'à ce que aprèsconfig/environment.rb
est chargé. Donc pour Rails 3, vous souhaitez modifierconfig/environment.rb
uniquement sur le serveur. Vous pouvez le faire avec un analogue de l'installation comme des Rails 2 ci-dessus, mais en utilisant un lien symbolique copie deconfig/environment.rb
, et l'ajout de l'étape de supprimer le fichier existant avant d'essayer de lien symbolique.Une autre option serait de remplacer l'environnement.rb sur le serveur de capistrano. Dans votre
config/deploy.rb
:Ce que vous faites quand vous mettez-vous
:rails_env, "staging"
de l'environnement est la définition de l'environnement pour la migration. En d'autres termes, c'est un environnement qui est défini uniquement lorsque vous êtes en cours d'exécution capistrano. Si je vous comprends bien, vous souhaitez modifier l'environnement lors de l'exécution de votre application, pas pour le déploiement.Afin de répondre à votre question, je vais avoir besoin de savoir comment vous êtes lancement (début) de votre application.
Si vous utilisez Phusion Passenger, vous aurez besoin de modifier votre RAILS_ENV pour le Passager
Étant donné que vous êtes dans un environnement partagé, vous aurez probablement envie d'aller avec le .htaccess route.
La bonne façon de résoudre ce problème est de définir les Rails de l'environnement dans votre Passager config. Obtenez votre fournisseur d'hébergement mutualisé à le configurer pour vous. Dans Apache, il est fait avec RailsEnv directive.
Si VRAIMENT vous ne pouvez pas faire cela, vous pourriez envisager de placer une TERRIBLE HACK comme ça en haut de vos Rails pré-initialiseur (config/preinitializer):
...qui va définir l'environnement avant le chargement de Rails à la chaîne dans cette config/forced_environment fichier. Pour votre étape de serveur, vous pouvez définir le stade de' l'environnement.
C'est un terrible, terrible hack. Votre kilométrage peut varier.
Ce que vous avez besoin est l'environnement de la directive dans votre nginx configuration.
Si vous utilisez Apache, il devrait y avoir un semblable directive. (doit être facile à google)
Vous ne pouvez pas changer cela avec seulement capistrano.
set :rails_env
garantit simplement que sur les tâches qui exigent une commande ajouté commeRAILS_ENV=#{rails_env} rake db:migrate
.