2013-06-04 21 views
1

我正在使用Linode与Ubuntu 10.04和Capistrano,Unicorn,& Nginx进行部署。Rails部署 - 你怎么做rake db:用capistrano重置?

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

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

回答

7

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

一旦设置,您可以:

cap sake:invoke task="db:reset" 
+0

当我尝试运行这个时,我得到:PGError:错误:权限被拒绝创建数据库 – Zephyr4434

+0

您可能还需要monkey-patch db:reset任务,请参阅:http://stackoverflow.com/a/21047289/869616 – Darme

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

对于Capistrano的三无实际删除数据库。如果您正在使用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 
1

,可以考虑使用capistrano-rails-collection

您也可以直接从存储库中的db.rake文件复制代码。或者,如果您想要一个完整的解决方案来运行远程服务器上的所有rake任务,请查看Cape gem。