web-dev-qa-db-ja.com

Capistrano gemを使用して本番データベースにシードする方法は?

Ruby on Rails 3.0.9を使用し、本番データベースにシードしたいと思いますすべてのデータベースを再構築せずにいくつかのレコードを追加するには(つまり、既存のすべてのレコードを削除せずに、それらの一部を追加するだけです)まだ存在していません。アプリケーションを動作させるには新しいデータが必要なので、それをしたいと思います。

したがって、私はCapistrano gemを使用しているため、cap -Tコマンドを使用して、使用可能なすべてのコマンドをリストし、目的を達成する方法を確認します。

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

「シードデータを使用してデータベースをリロードする」にある「リロード」という単語がわかりません。文。だから、私の質問は:私がcap deploy:seedローカルマシンのコンソールのコマンドは、シードプロセスが本番データベースのすべての既存データを削除してからそれを投入するか、そのコマンドが私が目指すようにそのデータベースに新しいデータを追加するだけですか?

36
Backo

Bundlerを使用している場合、capistranoタスクは次のようになります。

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

lib/deploy/seed.rbなどの別のファイルに配置し、次のコマンドを使用してdeploy.rbファイルに含めることができます。

load 'lib/deploy/seed'
68
Javier Vidal

これは私のために働いた:

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

27
Ioanna

Capistrano 3、Rails 4、および SeedMigrations を使用して、/ lib/capistrano/tasksの下にCapistrano seed.rbタスクを作成しました。

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

シードの移行は、スキーマの移行とは完全に分離され、db:migrateプロセスに従って実行されました。なんて嬉しい! :)

9
Martin Sommer

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
8
Mark

cap deploy:seedは、基本的にrake db:seedへの参照である必要があります。 seed.rbで指定しない限り、既存のデータを削除しないでください。

「リロード」という単語の最良の仮定は、:seedがステートレスコマンドであるということです。通常のRails移行。実行するたびにシードを「リロード」します。 ...ワイルドな推測ですが、いいですね、/


下のJavier Vidal回答をご覧ください

6
nowk

Capistrano-Rails gemの作成者と議論した後、この種のタスクを別のgemに実装することにしました。これはDRYのアイデアに従うのに役立ち、同じタスクを何度も実装しないと思います。

私はそれがあなたを助けることを願っています: https://github.com/dei79/capistrano-Rails-collection

6
dei79