使用 rake 命名空间作为配置?

Use rake namespace as configuration?

我正在尝试创建一个 rake 文件,其中包含用于消耗我的 API 的任务。我希望能够将大量参数传递给任务,具体取决于要使用的调用。为了使任务更易于使用,我希望命名空间成为配置的一部分。这可能吗?

namespace :myAPI do

    SERVER = 'local'
    namespace :live do
        SERVER = 'live'
    end
    namespace :beta do
        SERVER = 'beta'
    end

    BASE_URI = {
        live: "https://myapi.com/do/v1",
        beta: "https://beta.myapi.com/do/v1",
        local: "http://127.0.0.1:4500/do/v1"
    }

    desc 'Get currently logged users'
    task :extract_logged_users => :environment do
        get("BASE_URI[SERVER]/users/current")
    end

}

然后我希望能够 运行 这对实时服务器例如:

rake myAPI:live:extract_logged_users

您可以像这样以更动态的方式创建任务:

require 'rake'
BASE_URI = {
    live: "https://myapi.com/do/v1",
    beta: "https://beta.myapi.com/do/v1",
    local: "http://127.0.0.1:4500/do/v1"
}.each do |server,url|
  namespace :myAPI do
    namespace server do |ns|
      desc 'Get currently logged users'
      task :extract_logged_users do
          puts 'get("%s/users/current", %s)' % [server,url]
      end
    end
  end
end

(我用 puts 替换了您的 get 命令以检查发生了什么,并将 url 添加到命令中)。

现在您可以拨打:

rake myAPI:live:extract_logged_users
rake myAPI:beta:extract_logged_users
rake myAPI:local:extract_logged_users

输出:

get("live/users/current", https://myapi.com/do/v1)
get("beta/users/current", https://beta.myapi.com/do/v1)
get("local/users/current", http://127.0.0.1:4500/do/v1)

备选编码:

namespace :myAPI do

    BASE_URI = {
        live: "https://myapi.com/do/v1",
        beta: "https://beta.myapi.com/do/v1",
        local: "http://127.0.0.1:4500/do/v1"
    }

    BASE_URI .keys.each do |key|
      namespace key do |ns|
        desc 'Get currently logged users'
        task :extract_logged_users do
           puts 'get("%s")' % BASE_URI[key]
        end
      end
  end
end