【问题标题】:Rails - Run Rake tasks with CapistranoRails - 使用 Capistrano 运行 Rake 任务
【发布时间】:2015-04-15 13:10:44
【问题描述】:

我在这里挠头,想知道我是不是找错了树。我有一个使用 Capistrano 部署 Rails 应用程序的服务器。最近我在其中一个模型中添加了新的数据类型,现在我需要运行 Rake 任务来更新现有记录。

经过大量谷歌搜索后,我开始怀疑人们是否在 Capistrano 中使用 Rake 任务。 2013 年左右的一些论坛帖子提到 Capistrano 支持 .rake 扩展。而我发现的其他帖子表明 Capistrano 有自己的任务自动化系统,并且与 rake 不兼容。

我找到了Cape,但我不确定这是否是我正在寻找的,因为它似乎将 Rake 任务转换为上限配方。可能我在这一点上搞错了,我真的没有任何使用 Capistrano 的经验,甚至没有在完整的堆栈范围内工作。

我想知道的是:如何在我的远程服务器上运行一个简单的 Rake 任务?

为了清楚起见,我已经在最新的 Ubuntu LTS 14.10 上安装了该应用程序(如果有记忆的话)。我按照教程找到了here。我有完整的 sudo 访问权限,我可以 ssh 进入服务器。

提前感谢您帮助菜鸟

【问题讨论】:

标签: ruby-on-rails ruby rake capistrano


【解决方案1】:

如果您需要更新模型,当然可以编写 Rails 迁移 - 这将确保它在尚未运行的情况下运行。

如果是一次性任务,在服务器上执行 rake 任务的最简单方法就是通过 ssh。请参阅您提到的教程的最后一段:

cd /opt/www/testapp/current ; bin/rake RAILS_ENV=production db:seed

回答您关于 rake 的原始问题:您可以通过 capistrano 执行 rake 任务,类似于在本地执行它的方式,仅在 capistrano 脚本中。这是一个例子:

部署.rb:

namespace :rake do
  desc "My task"
  task :my_task do
    on roles(:app) do
      within "#{current_path}" do
        with rails_env: :production do
          execute :rake, "my_task"
          # !!!see NOTE at end of answer!!!
        end
      end
    end
  end
end

您可以在本地通过cap -T 查看所有上限任务。我上面写的 capistrano 任务应该显示为cap tasks:my_rake_task

如果您希望能够在不配置的情况下运行任何个可用的 rake 任务,请执行以下操作:

namespace :rake do
  desc "Invoke rake task"
  task :invoke do
    on roles(:app) do
      within "#{current_path}" do
        with rails_env: :production do
          execute :rake, ENV['task']
          # !!!see NOTE at end of answer!!!
        end
      end
    end
  end
end

那么你可以写:

cap production deploy:invoke task=my:rake:task

注意:您可能希望将执行行替换为

run "bin/rake RAILS_ENV=#{rails_env} #{ENV['task']}"

使用与教程相同的语法(没有 binstubs,您可能需要先配置 capistrano/bundler 和 capistrano/rbenv ...)

【讨论】:

  • 您拥有namespace :rake,但您的示例命令使用了部署命名空间。我必须使用 capistrano 的部署命名空间才能使用它。
【解决方案2】:

查看capistrano-rake

安装后,只需执行以下操作,即可在您的生产/登台服务器上运行任何 rake 任务,而无需凌乱的 capistrano 配方:

$ cap production invoke:rake TASK=your:rake:task

完全披露:我写的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2020-01-17
    • 2011-10-06
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2014-07-12
    相关资源
    最近更新 更多