En el mismo hilo de “intentando entender el Rake::Task”.
Ahora, bueno de antes, pero presento mi duda ahora, me encuentro con
que al ejecutar Rake::Tasks[‘db:migrate’] las migraciones se ejecutan
en una u otra tabla dependiendo de cosas que a primera vista nada
tienen que ver.
Esta es mi rake de ejemplo:
desc “Run migrations”
task :run_migrations => [:environment] do
Rake::Task[‘db:create:all’].execute
Rake::Task[‘db:migrate’].execute
end
Como veis intenta ejecutar
$ rake db:create:all
$ rake db:migrate
Y es eso lo que hace pero las migraciones las corre en la db de test
en vez de la development como vemos a
continuación:
$ rake db:drop:all
(in /Users/fguillen/Documents/develop-ror/euruko_app)
$ rake init:run_migrations > /dev/null
$ ls -l db/
total 88
-rw-r–r-- 1 fguillen staff 0 26 ene 20:39 development.sqlite3
drwxr-xr-x 15 fguillen staff 510 26 ene 18:50 migrate
-rw-r–r-- 1 fguillen staff 0 26 ene 20:39 production.sqlite3
-rw-r–r-- 1 fguillen staff 5938 26 ene 20:39 schema.rb
-rw-r–r-- 1 fguillen staff 34816 26 ene 20:39 test.sqlite3
Como veis se ha cargado la db test pero las demás están a cero.
Ahora bien… si saco de la rake el Rake::Task[‘db:create:all’] ,
entonces la migración la corre en development:
desc “Run migrations”
task :run_migrations => [:environment] do
Rake::Task[‘db:migrate’].execute
end
$ rake db:drop:all
$ rake db:create:all
$ rake init:run_migrations > /dev/null
$ ls -l db/
total 88
-rw-r–r-- 1 fguillen staff 34816 26 ene 20:41 development.sqlite3
drwxr-xr-x 15 fguillen staff 510 26 ene 18:50 migrate
-rw-r–r-- 1 fguillen staff 0 26 ene 20:41 production.sqlite3
-rw-r–r-- 1 fguillen staff 5938 26 ene 20:41 schema.rb
-rw-r–r-- 1 fguillen staff 0 26 ene 20:41 test.sqlite3
Otra prueba curiosa es que si dejamos el db:create:all dentro de la
rake pero las dbs ya existían de antes tenemos que también ejecuta la
migración en la db de development:
desc “Run migrations”
task :run_migrations => [:environment] do
Rake::Task[‘db:create:all’].execute
Rake::Task[‘db:migrate’].execute
end
$ rake db:drop:all
$ rake db:create:all
$ rake init:run_migrations > /dev/null
db/development.sqlite3 already exists
db/production.sqlite3 already exists
db/test.sqlite3 already exists
$ ls -l db/
total 88
-rw-r–r-- 1 fguillen staff 34816 26 ene 20:43 development.sqlite3
drwxr-xr-x 15 fguillen staff 510 26 ene 18:50 migrate
-rw-r–r-- 1 fguillen staff 0 26 ene 20:43 production.sqlite3
-rw-r–r-- 1 fguillen staff 5938 26 ene 20:43 schema.rb
-rw-r–r-- 1 fguillen staff 0 26 ene 20:43 test.sqlite3
Entonces al parecer lo que pasa es que ‘db:create:all’ modifica la
RAILS_ENV y la deja con valor ‘test’ entonces cuando llega
‘db:migrate’ ejecuta la migración en test.
He intentado, siguiendo las instrucciones de javi, a hacer esto:
desc “Run migrations”
task :run_migrations => [:environment] do
Rake::Task[‘db:create:all’].execute
ENV[‘RAILS_ENV’]=‘development’
Rake::Task[‘db:migrate’].execute
end
Pero nada
Tampoco esto
desc “Run migrations”
task :run_migrations => [:environment] do
Rake::Task[‘db:create:all’].execute
RAILS_ENV=‘development’
Rake::Task[‘db:migrate’].execute
end
Pues eso… que ni idea que puedo probar ahora… ¿algún capote?
Saludos
f.