toni siembra sembrar rucula proceso mano maiz lahuertinadetoni huertina como cebolla casa ruby-on-rails ruby ruby-on-rails-3 capistrano seed

ruby on rails - siembra - ¿Cómo sembrar la base de datos de producción usando la joya de Capistrano?



lahuertinadetoni youtube (6)

Después de una discusión con los autores de las gemas capistrano-rails, decidí implementar este tipo de tareas en una gema separada. Creo que esto ayuda a seguir la idea DRY y no implementar la misma tarea una y otra vez.

Espero que te ayude: https://github.com/dei79/capistrano-rails-collection

Estoy usando Ruby on Rails 3.0.9 y me gustaría sembrar la base de datos de producción para agregar algún registro sin reconstruir toda la base de datos (es decir, sin eliminar todos los registros existentes, sino simplemente agregar algunos que aún no existen) . Me gustaría hacerlo porque los nuevos datos son necesarios para que la aplicación funcione.

Entonces, dado que estoy usando la joya de Capistrano, ejecuto el comando cap -T en la consola para enumerar todos los comandos disponibles y saber cómo puedo lograr lo que apunto:

$ cap -T => ... => cap deploy:seed # Reload the database with seed data. => ...

No estoy seguro de la palabra "Recargar" presente en "Recargar la base de datos con datos de inicialización". frase. Entonces, mi pregunta es: si ejecuto el comando cap deploy:seed en la consola de mi máquina local, el proceso de siembra borrará todos los datos existentes en la base de datos de producción y luego lo completará o agregará los nuevos datos en esa base de datos. como pretendo hacer?


Esto funcionó para mí:

task :seed do puts "/n=== Seeding Database ===/n" on primary :db do within current_path do with rails_env: fetch(:stage) do execute :rake, ''db:seed'' end end end end

capistrano 3, Rails 4


Intente agregar algo como esto en su deploy.rb :

namespace :deploy do desc "reload the database with seed data" task :seed do run "cd #{current_path}; rake db:seed RAILS_ENV=#{rails_env}" end end


Si está utilizando bundler, entonces la tarea capistrano debería ser:

namespace :deploy do desc "reload the database with seed data" task :seed do run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}" end end

y puede colocarse en un archivo separado, como lib/deploy/seed.rb e incluido en su archivo deploy.rb con el siguiente comando:

load ''lib/deploy/seed''


Utilizando Capistrano 3, Rails 4 y SeedMigrations , creé una tarea Capistrano seed.rb en / lib / capistrano / tasks:

namespace :deploy do desc ''Runs rake db:seed for SeedMigrations data'' task :seed => [:set_rails_env] do on primary fetch(:migration_role) do within release_path do with rails_env: fetch(:rails_env) do execute :rake, "db:seed" end end end end after ''deploy:migrate'', ''deploy:seed'' end

Mis migraciones iniciales ahora están completamente separadas de mis migraciones de esquema y se ejecutaron siguiendo el proceso db: migrate. ¡Que alegria! :)


cap deploy:seed debería ser básicamente una referencia a rake db:seed . No debería eliminar los datos existentes, a menos que lo haya especificado para hacerlo en su seed.rb

La mejor suposición para la palabra "Recargar" es que :seed es un comando sin estado, no sé automáticamente dónde quedó, como las migraciones de rieles normales. Entonces, técnicamente siempre estarías "recargando" la semilla, cada vez que la ejecutas. ... Una suposición salvaje, pero suena bien, ¿no?

Por favor, vea la respuesta de Javier Vidal continuación