ruby 根据`lib / tasks`目录中的目录结构自动在命名空间内加载rake任务。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 根据`lib / tasks`目录中的目录结构自动在命名空间内加载rake任务。相关的知识,希望对你有一定的参考价值。

# lib/tasks/dir_1/dir_2/create_files.rb

# ------------
# Tasks here are loaded into the dir_1:dir_2 namespace because it is inside 
# the dir_1/dir_2 subdirectory
# ------------

desc "My exampled namespaced task"
task :xtask => :environment do
  # task can be executed with `bundle exec rake dir_1:dir_2:xtask`
end
# lib/tasks/load_tasks.rake

# ------------
# Looks at every .rb file in the lib/tasks and adds them to rake within the
# namespace of their subdirectories
# ------------

# Important to note we are looking specifically for .rb files, so they 
# aren't added to the global rake namespace
Dir.glob("#{Rails.root}/lib/tasks/**/*.rb").each do |file|

  path = file.split('/')
  namespaces = path[(path.index('tasks') + 1)..-2]
  filename = path.last
  if namespaces.size > 0
    namespace namespaces[0].to_sym do
      if namespaces.size > 1
        while namespaces.size > 1
          namespaces = namespaces[1..-1]
          namespace namespaces[0].to_sym do
            load file if namespaces.size > 0
          end
        end
      else
        load file
      end
    end
  else
    load file
  end

end

以上是关于ruby 根据`lib / tasks`目录中的目录结构自动在命名空间内加载rake任务。的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 3 - 为每个请求重新加载 lib 目录

Ruby 如何知道在哪里可以找到所需的文件?

Rails Guide -- Ruby on Rake

ruby 的ActionView / lib目录/ ACTION_VIEW /助理/标签/ label.rb

要求Ruby目录中所有文件的最干净/单线方法?

SSIS 中的文件系统任务 (File System Task)