【问题标题】:Invoking rake task for specific environment为特定环境调用 rake 任务
【发布时间】:2015-02-20 16:01:51
【问题描述】:

您好,我正在为我的迷你项目编写部署脚本(rake 任务)。当我调用数据库种子时,我有这部分:

Rake::Task['db:seed'].invoke

还有编译资产:

Rake::Task['assets:precompile'].invoke

所以我想知道有没有一种方法可以在生产环境中调用这些任务,就像您从这样的控制台执行的操作:

RAILS_ENV=production rake db:seed

【问题讨论】:

    标签: ruby-on-rails ruby deployment rake


    【解决方案1】:

    在 Rails 中,您可以这样做:

    [arup@app (master)]$ rails g task my_namespace my_task1
          create  lib/tasks/my_namespace.rake
    [arup@app (master)]$ cat lib/tasks/my_namespace.rake
    namespace :my_namespace do
      desc "TODO"
      task my_task1: :environment do
      end
    end
    [arup@app (master)]$
    

    现在看到 Rakefile 已经为您准备好了。

    只需打开您刚刚创建的Rakefile,然后定义您的任务。

    namespace :my_namespace do
      task my_task1: :environment do
        Rake::Task['db:seed'].invoke
        Rake::Task['assets:precompile'].invoke
      end
    end
    

    提示是2.10 Custom Rake Tasks

    【讨论】:

    • 我不认为这实际上回答了这个问题。当您像这样以编程方式调用 Rake 任务时,没有好的方法可以更改当前的“环境”值。您实际上可以使用system "RAILS_ENV=production rake ...."。我认为这几乎是您唯一的好选择。
    • 好的,如果它对你有用,那就太好了。我在代码示例中没有看到任何更改 Rails '环境' 设置的内容,我认为这是你需要的,但是,如果你有你需要的,那就太好了!
    猜你喜欢
    • 2012-02-13
    • 2014-02-28
    • 2015-10-29
    • 2012-04-04
    • 1970-01-01
    • 2015-03-10
    • 2014-02-27
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多