ruby-on-rails - 読み方 - ruby on rails デプロイ




Capistrano gemを使って本番データベースをシードする方法は? (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プロセスの後に実行されました。 どのような喜び! :)

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

だから、私はCapistrano gemを使っているので、使用可能なすべてのコマンドをリストし、どのように目標を達成できるかを知るために、コンソールでcap -Tコマンドを実行します。

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

私は、 "Reload the word in the seed data"の中にある "Reload"という言葉にはわかりません。 文。 ですから、私の質問です: ローカルマシン上のコンソールにcap deploy:seedコマンドを実行すると、運用データベース内の既存のデータがすべて削除された後、そのデータベースにデータが追加されます私が狙っているように?



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

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

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





seed