Rails部署 - 你如何使用capistrano进行rake db:reset?

时间:2013-06-04 20:00:49

标签: ruby-on-rails ubuntu capistrano

我正在使用Linode和Ubuntu 10.04以及Capistrano,Unicorn和& Nginx要部署。

如何使用此设置执行等效的heroku run rake db:reset?是否像cap deploy:cold一样简单来运行迁移?

我已经部署并希望删除所有数据库并重新运行所有迁移但不确定使用此设置运行哪些命令。

4 个答案:

答案 0 :(得分:8)

我写了一个小文件,你可以复制以通过capistrano运行任意rake任务:http://jessewolgamott.com/blog/2012/09/10/the-one-where-you-run-rake-commands-with-capistrano/

设置完成后,您可以:

cap sake:invoke task="db:reset"

答案 1 :(得分:4)

对于没有实际删除数据库的Capistrano 3。使用bundle exec cap db:reset

namespace :db do
  desc 'Resets DB without create/drop'
  task :reset do
    on primary :db do
      within release_path do
        with rails_env: fetch(:stage) do
          execute :rake, 'db:schema:load'
          execute :rake, 'db:seed'
        end
      end
    end
  end
end

答案 2 :(得分:3)

您可以将以下内容添加到deploy.rb文件

namespace :custom do
  task :task do
    run "cd #{current_path} && bundle exec rake db:reset RAILS_ENV=#{rails_env}"
  end
end

然后运行cap custom:task以清除数据库。

答案 3 :(得分:2)

如果您使用的是Capistrano 3,请考虑使用capistrano-rails-collection

您还可以直接从存储库中的db.rake文件中复制代码。

或者,如果您想要一个完整的解决方案来在远程服务器上运行所有rake任务,请查看Cape gem。