【问题标题】:Rails deployment - how do you do rake db:reset with capistrano?Rails 部署 - 你如何使用 capistrano 进行 rake db:reset?
【发布时间】:2013-05-31 08:35:59
【问题描述】:

我正在使用 Linode 和 Ubuntu 10.04 以及 Capistrano、Unicorn 和 Nginx 进行部署。

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

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

【问题讨论】:

    标签: ruby-on-rails ubuntu capistrano


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      对于没有实际删除数据库的 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
      

      【讨论】:

        【解决方案3】:

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

        设置完成后,您可以:

        cap sake:invoke task="db:reset"
        

        【讨论】:

        • 当我尝试运行它时,我得到:PGError: ERROR: permission denied to create database
        • 您可能还需要对 db:reset 任务进行猴子补丁,请参阅:stackoverflow.com/a/21047289/869616
        【解决方案4】:

        您可以将以下内容添加到您的 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清空数据库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-11
          • 1970-01-01
          相关资源
          最近更新 更多