繁体   English   中英

如何使用Capistrano gem种植生产数据库?

[英]How to seed the production database using the 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命令,播种过程将删除生产数据库中的所有现有数据,然后填充它或者该命令只是在该数据库中添加新数据我的目标是什么?

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

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

我希望它可以帮到你: https//github.com/dei79/capistrano-rails-collection

cap deploy:seed应该基本上是对 rake db:seed的引用。 除非您在 seed.rb指定它,否则不应删除现有数据。

\n

“Reload”这个词的最佳假设是 :seed是一个无状态命令,我不会自动知道它停在哪里,就像常规的rails迁移一样。 所以从技术上讲,每次运行时,你都会“重新加载”种子。 ......一个疯狂的猜测,但听起来不错,不是吗?


请查看下面的Javier Vidal答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM