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

如果您使用的是 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'
于 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

capistrano 3,导轨 4

于 2014-05-22T14:35:59.423 回答
11

使用 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 进程运行。多么快乐!:)

于 2014-03-06T19:00:32.667 回答
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是一个无状态命令,我不会自动知道它在哪里停止,就像常规的 Rails 迁移一样。所以从技术上讲,每次运行种子时,您总是会“重新加载”种子。...一个疯狂的猜测,但听起来不错,不是吗?


请在下方查看Javier Vidal答案

于 2011-09-18T15:33:13.320 回答
6

在与 capistrano-rails gem 作者讨论后,我决定在单独的 gem 中实现这种任务。我认为这有助于遵循 DRY 的想法,而不是一遍又一遍地执行相同的任务。

希望对您有所帮助:https ://github.com/dei79/capistrano-rails-collection

于 2013-12-26T18:27:40.233 回答