Ruby on Rails 3.0.9を使用し、本番データベースにシードしたいと思いますすべてのデータベースを再構築せずにいくつかのレコードを追加するには(つまり、既存のすべてのレコードを削除せずに、それらの一部を追加するだけです)まだ存在していません。アプリケーションを動作させるには新しいデータが必要なので、それをしたいと思います。
したがって、私はCapistrano gemを使用しているため、cap -T
コマンドを使用して、使用可能なすべてのコマンドをリストし、目的を達成する方法を確認します。
$ cap -T
=> ...
=> cap deploy:seed # Reload the database with seed data.
=> ...
「シードデータを使用してデータベースをリロードする」にある「リロード」という単語がわかりません。文。だから、私の質問は:私がcap deploy:seed
ローカルマシンのコンソールのコマンドは、シードプロセスが本番データベースのすべての既存データを削除してからそれを投入するか、そのコマンドが私が目指すようにそのデータベースに新しいデータを追加するだけですか?
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'
これは私のために働いた:
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
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プロセスに従って実行されました。なんて嬉しい! :)
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
cap deploy:seed
は、基本的にrake db:seed
への参照である必要があります。 seed.rb
で指定しない限り、既存のデータを削除しないでください。
「リロード」という単語の最良の仮定は、:seed
がステートレスコマンドであるということです。通常のRails移行。実行するたびにシードを「リロード」します。 ...ワイルドな推測ですが、いいですね、/
下のJavier Vidal
回答をご覧ください
Capistrano-Rails gemの作成者と議論した後、この種のタスクを別のgemに実装することにしました。これはDRYのアイデアに従うのに役立ち、同じタスクを何度も実装しないと思います。
私はそれがあなたを助けることを願っています: https://github.com/dei79/capistrano-Rails-collection