0

Je cours Rails 4.2.5 app sur ma machine locale (OS X El Capitan). Il fonctionnait bien en mode développement.My rails 4.2.5 serveur de l'application continue de se connecter à la production db au lieu de développement db en mode développement

Mais j'ai alors décidé de voir comment cela fonctionnait en mode production, donc en production et en fonctionnement du serveur.

bundle install --deployment --without development test 
bundle exec rake db:create RAILS_ENV=production 
bundle exec rake db:migrate RAILS_ENV=production 
bundle exec rake db:seed RAILS_ENV=production 
bundle exec rake assets:precompile RAILS_ENV=production 
bundle exec rails s -e production 

Tout n'était pas beau. J'ai donc fait quelques changements jusqu'à ce que tout fonctionne correctement. Après cela, j'avais besoin d'ajouter quelques fonctionnalités implémentées, donc je suis revenu en mode de développement et j'ai lancé le serveur.

bundle install 
bundle exec rake db:migrate 
bundle exec rake db:seed 
bundle exec rails s 

Le fonctionnement du serveur sans problème, mais je trouve qu'il travaillait avec la production db au lieu de développement db.

J'ai essayé d'effacer tous les caches en exécutant bundle exec rake tmp:cache:clear mais cela n'a pas aidé.

Pour votre information, j'utilise postgres pour la production et le développement.

Voici le fichier database.yml:

default: &default 
    adapter: postgresql 
    encoding: unicode 
    pool: 30 

development: 
    <<: *default 
    username: <%= ENV['OATV_POSTGRES_USERNAME'] %> 
    password: <%= ENV['OATV_POSTGRES_PASSWORD'] %> 
    database: <%= ENV['OATV_POSTGRES_DATABASE_DEVELOPMENT'] %> 

test: 
    <<: *default 
    username: <%= ENV['OATV_POSTGRES_USERNAME'] %> 
    password: <%= ENV['OATV_POSTGRES_PASSWORD'] %> 
    database: <%= ENV['OATV_POSTGRES_DATABASE_TEST'] %> 

production: 
    <<: *default 
    url: <%= ENV['DATABASE_URL'] %> 

Bien sûr, je mets tous les env vars sur ma machine locale depuis que je dois tester dans le développement, le test et le mode de production.

Quelle est la cause possible ici?

Merci pour toute réponse à l'avance.

+0

avez-vous tué le précédent serveur de production daemon? – sixty4bit

+0

@ sixty4bit Je suis désolé. J'ai mal saisi le texte. En fait, je n'ai pas exécuté le serveur de production en tant que démon. Modifié la question en conséquence. – artificis

+0

Vérifiez si RAILS_ENV est exporté dans votre environnement. Peut-être que vous l'avez fait par commodité? –

Répondre

1

Juste pour l'écrire ici. solutions possibles:

.Restart le serveur (il doit effacer toutes les variables non désirées qui ont été fixés par l'environnement de production, et non apuré lors de l'exécution en mode de développement) PAR EXEMPLE url: <%= ENV['DATABASE_URL'] %> a été fixé par l'environnement de production, mais n'a pas été définie par le mode de développement

.Modification:

development: 
    <<: *default 

à:

development: 
    <<: *default 
    url: postgres:///db/database-name 

Alors vous pointer vers votre développement local base de données manuellement, au lieu d'utiliser l'URL déjà enregistrée en mode production

Ou (peut-être) troisième:

.Run bundle exec rails s -e development

+0

La solution 2 a fonctionné pour moi, mais pas parfaitement. J'ai spécifié l'URL postgres pour le développement explicitement dans database.yml et maintenant il se connecte au développement db, ce qui est correct. Mais j'ai un autre problème. La console Rails ('bundle exec rails c') ne charge pas' pry-rails', elle charge l'irb par défaut. J'ai spécifié pry-rails dans le groupe de développement dans le Gemfile. – artificis

+0

Voici les journaux de la console des rails: '' '→ Exécuter les rails de développement c -e développement Exécution via le préchargeur de ressort en cours 89518 Chargement de l'environnement de développement (Rails 4.2.5) irb (principal): 001: 0>' '' – artificis

+0

@consigliere heh, c'est un problème un peu différent de se connecter à une base de données, mais pour moi tout se résume à la même cause - certaines variables ont été définies lors de l'exécution du serveur de production et maintenant ces variables ne sont pas en mode développement et il continue à agir de cette manière (où la solution # 2 le prouve). Vous essayez de le patcher (mais ok, si le redémarrage est hors de question). Essayez d'exécuter 'bundle install -e development' ou quelque chose comme ça (si cette commande est possible) et essayez aussi de lancer dans le terminal' source ~/.bashrc' pour essayer de recharger toutes les variables à partir de ce fichier. – Aleks