自定义 Rails 任务

这些任务中的许多可能需要 Capistrano::Rails

从环境变量运行任意 rake 任务

来自 Capistrano/Rails PR #209

namespace :deploy do
  desc 'Runs any rake task, cap deploy:rake task=db:rollback'
  task rake: [:set_rails_env] do
    on release_roles([:db]) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, ENV['task']
        end
      end
    end
  end
end

通过环境变量传递要运行的 rake 任务。这是一个在服务器上运行 rake 任务的简单示例。

bundle exec cap production deploy:rake task=db:seed

条件迁移

源于 Capistrano/Rails 问题 #199

部署中常见的问题是缓慢的迁移,这会导致停机。在这种情况下,您通常希望有条件地运行迁移,即主要部署不运行它们,但您可以在更合适的时间手动运行它们。为此,您可以在您的 Capfile 中添加以下内容

require 'capistrano/rails/migrations' if ENV['RUN_MIGRATIONS']

现在迁移默认情况下不会运行,但可以使用以下命令运行它们

RUN_MIGRATIONS=1 bundle exec cap production deploy:migrate
Fork me on GitHub