Rails deployment - how do you do rake db:reset with capistrano?

回眸只為那壹抹淺笑 提交于 2019-12-24 17:44:11

问题


I am using Linode with Ubuntu 10.04 and Capistrano, Unicorn, & Nginx to deploy.

How do I do the equivalent of heroku run rake db:reset with this setup? Is it as simple as cap deploy:cold again to run the migrations?

I've already deployed and want to drop all databases and rerun all the migrations but am not sure which commands to run with this setup to do so.


回答1:


I wrote a tiny little file you can copy to run arbitrary rake tasks via capistrano: http://jessewolgamott.com/blog/2012/09/10/the-one-where-you-run-rake-commands-with-capistrano/

once setup, you can:

cap sake:invoke task="db:reset"



回答2:


For Capistrano 3 without actual dropping the database. Use 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



回答3:


You could add the following to your deploy.rb file

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

Then run cap custom:task to clear the database.




回答4:


If you are using Capistrano 3, consider using the capistrano-rails-collection.

You can also use copy the code directly from db.rake file from the repository.

Or, if you want a full-fledged solution to run all your rake tasks on a remote server, check out the Cape gem.



来源:https://stackoverflow.com/questions/16926461/rails-deployment-how-do-you-do-rake-dbreset-with-capistrano

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!