2011-04-14 4 views
2

J'ai créé une nouvelle application Ruby on Rails (première application sur laquelle je travaille dans Rails 3), et pour une raison inconnue, mon application semble être confuse quant à l'environnement dans lequel elle devrait fonctionner (à moins que je ne sois confuse) . Lorsque je lance rake db:create, il crée à la fois les bases de données "myapp_development" et "myapp_test". Lorsque je lance ensuite rake db:drop, il supprime la base de données de développement, mais pas la base de données de test.Rails app confus au sujet de l'environnement?

Que se passe-t-il?

Edit 1: Voici ce que mon fichier database.yml ressemble:

development: 
    adapter: mysql 
    database: myapp_development 
    username: root 
    password: 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: mysql 
    database: myapp_test 
    username: root 
    password: 

production: 
    adapter: mysql 
    database: myapp_production 
    username: root 
    password: 

Edit 2: Essayé recréer une nouvelle application à partir de zéro, et ont toujours la même question. Voici ce que j'ai fait.

  1. Création d'une nouvelle application Rails:

rails new myapp 

  2. Edité mon Gemfile:

source 'http://rubygems.org' 

gem 'rails', '3.0.6' 
gem 'mysql', '2.8.1' 

# Bundle the extra gems: 
gem 'warden', '1.0.3' 
gem 'devise', '1.2.1' 
gem 'geokit' 

# Bundle gems for the local environment. Make sure to 
# put test-only gems in this group so their generators 
# and rake tasks are available in development mode: 
group :development, :test do 
    gem 'ruby-debug' 
end 

  3. Edité mon database.yml:

development: 
    adapter: mysql 
    database: myapp_development 
    username: root 
    password: 
    host: localhost 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: mysql 
    database: myapp_test 
    username: root 
    password: 
    host: localhost 

production: 
    adapter: mysql 
    database: myapp_production 
    username: root 
    password: 
    host: localhost 

  4. Exécution rake db:create à ce p oint crée à la fois myapp_development et myapp_test. Si je continue à exécuter rake db:drop suivi de rake db:create, j'obtiens un avertissement de ligne de commande indiquant que «myapp_test existe déjà» puisque la suppression supprime seulement myapp_development, mais le create tente de créer des bases de données de développement et de test.

+1

Je suis confronté exactement au même problème. J'utilise rake db: create et rails crée à la fois des schémas de développement et de test. Quand je lance rake db: drop il ne laisse tomber que le schéma de développement. C'est certainement un problème de configuration de l'environnement car il fonctionne correctement sur une machine (un macos snow léopard) mais pas sur ma nouvelle machine (un macos lion). J'essaye toujours de comprendre les différences entre les envs des deux machines qui pourraient causer ce comportement. Toute astuce est appréciée. Va poster si je trouve quelque chose. –

+0

Je n'ai jamais trouvé de solution à ce problème, alors je serais heureux de savoir si vous vous en êtes rendu compte! –

Répondre

0

Vérifiez votre config/database.yml fichier dans votre application pour la configuration de la base de données, vous voulez probablement tester autour si. mais database.yml vous permettra d'accéder à tout. Il utilisera le développement db par défaut, bien que vous spécifiez quand utiliser la production.

Une note, juste en cours d'exécution rake db:migrate va créer les bases de données si elles n'existent pas et migrer vos modèles, vous pouvez utiliser à la place

+0

J'ai ajouté le contenu de mon fichier database.yml à la question. –

1

Il créerait uniquement les bases de données de développement et de test si vous avez exécuté rake db:create:all, et non rake db:create. Ce dernier ne créera que l'un ou l'autre, selon l'environnement dans lequel vous travaillez.

+1

Exactement, mais je ne cours pas 'rake db: create: all', je lance simplement' rake db: create', et il crée à la fois les bases de données de test et de développement. J'ai ajouté mon fichier databases.yml à ma question au cas où cela vous aiderait. –