How to seed the production database using the Capistrano gem?

后端 未结 6 1978
不思量自难忘°
不思量自难忘° 2021-01-30 01:47

I am using Ruby on Rails 3.0.9 and I would like to seed the production database in order to add some record without re-building all the database (that is, with

相关标签:
6条回答
  • 2021-01-30 02:11

    After a discussion with capistrano-rails gem authors I decided to implement this kind of tasks in a separate gem. I think this helps to follow the DRY idea and not implementing the same task over and over again.

    I hope it helps you: https://github.com/dei79/capistrano-rails-collection

    0 讨论(0)
  • 2021-01-30 02:15

    cap deploy:seed should basically be a reference to rake db:seed. It should not delete existing data, unless you specified it to do so in your seed.rb.

    Best assumption for the word "Reload" is that :seed is a stateless command, I does not automatically know where it left off, like regular rails migrations. So technically you would always be "reloading" the seed, every time you run it. ...A wild guess, but it sounds good, no?


    Please view Javier Vidal answer below

    0 讨论(0)
  • 2021-01-30 02:17

    Try adding something like this in your 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
    
    0 讨论(0)
  • 2021-01-30 02:23

    This worked for me:

    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

    0 讨论(0)
  • 2021-01-30 02:24

    If you are using bundler, then the capistrano task should be:

    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
    

    and it might be placed in a separate file, such as lib/deploy/seed.rb and included in your deploy.rb file using following command:

    load 'lib/deploy/seed'
    
    0 讨论(0)
  • 2021-01-30 02:35

    Using Capistrano 3, Rails 4, and SeedMigrations, I created a Capistrano seed.rb task under /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
    

    My seed migrations are now completely separate from my schema migrations, and ran following the db:migrate process. What a joy! :)

    0 讨论(0)
提交回复
热议问题