Purgar o recrear una base de datos de Ruby on Rails
Tengo una base de datos dev Ruby on Rails llena de datos. Quiero borrar todo y reconstruir la base de datos. Estoy pensando en usar algo como:
rake db:recreate
Es esto posible?
18 answers
Conozco dos maneras de hacer esto:
Esto restablecerá su base de datos y recargará su esquema actual con todo:
rake db:reset db:migrate
Esto destruirá su base de datos y luego la creará y luego migrará su esquema actual:
rake db:drop db:create db:migrate
Todos los datos se perderán en ambos escenarios.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-04 02:13:52
En los carriles 4, todo lo necesario es
$ rake db:schema:load
Eso eliminaría todo el contenido de su BD y recrearía el esquema a partir de su esquema.archivo rb, sin tener que aplicar todas las migraciones una por una.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-20 04:09:55
Utilizo el siguiente liner en Terminal.
$ rake db:drop && rake db:create && rake db:migrate && rake db:schema:dump && rake db:test:prepare
Puse esto como un alias de shell y lo nombré remigrate
Por ahora, puede fácilmente" encadenar " tareas de Rails:
$ rake db:drop db:create db:migrate db:schema:dump db:test:prepare # db:test:prepare no longer available since Rails 4.1.0.rc1+
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 14:50:06
Actualización: Con el advenimiento de Rails 5, este comando será accesible a través de este comando:
Rails db: purge db: create db: migrate RAILS_ENV = test
A partir de la última versión de rails 4.2 ahora puedes ejecutar:
rake db:purge
Fuente: commit
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
task :purge => [:load_config] do
ActiveRecord::Tasks::DatabaseTasks.purge_current
end
Se pueden usar juntos como se mencionó anteriormente:
rake db:purge db:create db:migrate RAILS_ENV=test
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 17:09:23
Dependiendo de lo que quieras, puedes usar {
rake db:create
Build para construir la base de datos desde cero desde config/database.yml
, o {
rake db:schema:load
Build para construir la base de datos desde cero a partir de su archivo schema.rb
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-07 01:29:48
Simplemente emita la secuencia de los pasos: suelte la base de datos, luego vuelva a crearla, migre los datos y, si tiene semillas, siembra la base de datos:
rake db:drop db:create db:migrate db:seed
Dado que el entorno predeterminado para rake
es development , en caso de que vea la excepción en las pruebas de especificaciones, debe volver a crear la bd para el entorno test de la siguiente manera:
RAILS_ENV=test rake db:drop db:create db:migrate
En la mayoría de los casos, la base de datos de prueba se siembra durante los procedimientos de prueba, por lo que db:seed
no es necesario pasar la acción de la tarea. De lo contrario, deberá preparar la base de datos:
rake db:test:prepare
O
RAILS_ENV=test rake db:seed
Además, para usar la tarea recrear puede agregar a Rakefile el siguiente código:
namespace :db do
task :recreate => [ :drop, :create, :migrate ] do
if ENV[ 'RAILS_ENV' ] !~ /test|cucumber/
Rake::Task[ 'db:seed' ].invoke
end
end
end
Entonces tema:
rake db:recreate
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 07:52:52
Desde la línea de comandos ejecute
rake db:migrate:reset
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-24 23:19:41
Use como
rake db:drop db:create db:migrate db:seed
Todo en una línea. Esto es más rápido ya que el entorno no se recarga una y otra vez.
Db: drop - soltará la base de datos.
Db: create - creará la base de datos (host/db/password se tomará de config/database.yml)
Db: migrate - ejecutará las migraciones existentes desde el directorio (db/migration/.po)*.
Db: seed - ejecutará los datos de seed posibles desde el directorio (db/migration/seed.rb) ..
Normalmente prefiero:
rake db:reset
Hacer todo a la vez.
Salud!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-20 07:24:44
Puede hacer manualmente:
rake db:drop
rake db:create
rake db:migrate
O simplemente rake db:reset
, que ejecutará los pasos anteriores pero también ejecutará su archivo db/seeds.rb
.
Un matiz añadido es que rake db:reset
se carga directamente desde su archivo schema.rb
en lugar de ejecutar todos los archivos de migraciones de nuevo.
Sus datos se quedan boquiabiertos en todos los casos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-14 02:19:52
Puede usar la siguiente línea de comandos:
rake db:drop db:create db:migrate db:seed db:test:clone
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-14 12:51:35
Para soltar una base de datos en particular, puede hacer esto en la consola de rails:
$rails console
Loading development environment
1.9.3 > ActiveRecord::Migration.drop_table(:<table_name>)
1.9.3 > exit
Y luego migrar DB de nuevo
$bundle exec rake db:migrate
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-06 10:44:01
On rails 4.2, para eliminar todos los datos pero preservar la base de datos
$ bin/rake db:purge && bin/rake db:schema:load
Https://github.com/rails/rails/blob/4-2-stable/activerecord/CHANGELOG.md
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-06 13:18:04
Puede utilizar
db:reset
- para ejecutar db: drop y db: setup o
db:migrate:reset
- que ejecuta db: drop, db:create y db: migrate.
Dependiente en el que desea utilizar el esquema exist.rb
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-06 02:26:03
De acuerdo con Rails guide , este liner debe usarse porque cargaría desde schema.rb
en lugar de recargar los archivos de migración uno por uno:
rake db:reset
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-01 08:10:51
Debido a que en desarrollo , siempre querrá volver a crear la base de datos,puede definir una tarea de rake en su carpeta lib/tasks como esa.
namespace :db do
task :all => [:environment, :drop, :create, :migrate] do
end
end
Y en terminal se ejecutará
rake db:all
Reconstruirá su base de datos
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-25 18:45:27
Creo que la mejor manera de ejecutar este comando:
**rake db:reset** it does db:drop, db:setup
rake db:setup does db:create, db:schema:load, db:seed
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-19 07:37:07
Simplemente puede ejecutar
rake db:setup
Soltará la base de datos, creará una nueva base de datos y rellenará la base de datos desde seed si creó el archivo seed con algunos datos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-27 09:47:49
Hoy he hecho bastantes cambios en mi esquema rails. Me di cuenta de que necesitaba dos modelos adicionales en una jerarquía y algunos otros para ser eliminados. Hubo muchos pequeños cambios requeridos en los modelos y controladores.
Agregué los dos nuevos modelos y los creé, usando:
rake db:migrate
Luego edité el esquema.archivo rb. Eliminé manualmente los modelos antiguos que ya no eran necesarios, cambié el campo de clave externa según lo requerido y solo lo reordené un poco para hacerlo más claro a me. I suprimido todas las migraciones, y luego volver a ejecutar la compilación a través de:
rake db:reset
Funcionó perfectamente. Todos los datos tienen que ser recargados, por supuesto. Rails se dio cuenta de que las migraciones habían sido eliminadas y restableció la marca de agua alta:
-- assume_migrated_upto_version(20121026094813, ["/Users/sean/rails/f4/db/migrate"])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-26 11:12:32