37

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

したがって、私は Capistrano gem を使用しているのでcap -T、コンソールでコマンドを実行して、使用可能なすべてのコマンドを一覧表示し、目的を達成する方法を確認します。

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

「シードデータを使用してデータベースを再ロードする」にある「再ロード」という言葉がわかりません。文。したがって、私の質問は次のとおりです。ローカル マシンのコンソールでコマンドを実行するcap deploy:seedと、シード プロセスによって本番データベース内の既存のデータがすべて削除されてからデータが入力されますか、それとも、そのコマンドによって目的のデータベースに新しいデータが追加されるだけでしょうか。行う?

4

6 に答える 6

70

バンドラーを使用している場合、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'
于 2012-02-16T11:46:18.897 に答える
29

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

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

カピストラーノ 3、レール 4

于 2014-05-22T14:35:59.423 に答える
8

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
于 2012-01-18T15:01:34.037 に答える
6

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

「リロード」という言葉の最良の仮定は、それ:seedがステートレス コマンドであるということです。通常のレール マイグレーションのように、中断した場所を自動的に知ることはできません。したがって、技術的には、シードを実行するたびに、常にシードを「リロード」することになります。…勝手な推測ですが、良さそうですよね?


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

于 2011-09-18T15:33:13.320 に答える