【问题标题】:Rake: Processing files in a specified source directoryRake:处理指定源目录中的文件
【发布时间】:2014-05-19 23:57:01
【问题描述】:

在我的 Rails 项目中,我有一个我想使用 Rake 处理的外部提供文件的特定列表。我的目标是能够将这些文件的源目录指定为如下参数:

rake foofiles:process[vendor/sources]

目前我正在使用分配给常量的FileList 指定文件名(以及它们在源目录中的相对路径):

REQUIRED_FILES = FileList[
  'blah.csv',
  'subdir/something.csv',
  'subdir/monkeys/foo.bar',
  ...
]

如何在每个文件前面加上我的源目录参数,以便我可以创建一个依赖于该目录中存在的文件的任务? (理想情况下,如果没有所有这些文件,什么都不会发生)

例如,如果我使用上面键入的rake 命令,我需要我的任务依赖于vendor/sources/blah.csv, vendor/sources/subdir/something.csv, vendor/sources/subdir/monkeys/foo.bar 等。

编辑: 为数组/列表中的每个元素添加前缀相对来说是微不足道的,我对如何构建我的任务及其依赖关系感到更加困惑,因此我可以实际访问我提供的源文件夹参数,然后使用新的前置文件列表作为实际完成工作的处理任务的依赖项。

如果我想要我在顶部使用的语法,主要调用的任务将不得不看起来像这样:

namespace :foofiles do

  task :process, [:source_directory] => [???, my_newly_prepended_file_list] do |t, args|
    # Do stuff
  end

end

但我不知道如何将 :source_directory 参数提供给执行前置任务的任务,然后将前置文件列表作为依赖项返回给 :process 任务。

【问题讨论】:

  • “我需要我的任务依赖于 vendor/sources/blah.csv、vendor/sources/subdir/something.csv、vendor/sources/subdir/monkeys/foo 是什么意思.bar 等”?您希望将这些文件作为参数传递给您的 rake 任务,或者您是在谈论 rake 任务之间的依赖关系,还是完全不同的东西?

标签: ruby-on-rails ruby rake rake-task rakefile


【解决方案1】:

为什么不只保留一个后缀数组,然后将参数附加到数组中每个元素的开头,然后创建文件列表?

suffixes = [
  'blah.csv',
  'subdir/something.csv',
  'subdir/monkeys/foo.bar',
]

files = suffixes.map { |suffix| File.join(prefix, suffix) }

file_list = FileList[*files]

prefix 是传入的参数。

【讨论】:

  • 我已经编辑了我的问题。我对与我的案例相关的整体任务/依赖结构感到更加困惑。
【解决方案2】:

我最终只使用了一个环境变量,就我而言,它比 Rake 的内置参数实现更容易使用。这样我就可以在任务块之外使用变量并使用前置路径(以卡梅隆在另一个答案中建议的方式)构建我的 FileList:

namespace :foofiles do

  REQUIRED_FILES = [...]
  source_directory = ENV['SOURCEDIR'] || 'vendor/sources'

  source_files = FileList[REQUIRED_FILES.map { |relative_path| File.join source_directory, relative_path }]
  # Note: FileList can take an array inside the square brackets without needing the splat (*) operator

  task process: source_files do
    ...
  end

end

所以现在我可以像这样从终端调用它:

SOURCEDIR=some/folder rake foofiles:process

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多