【问题标题】:Best practices for storing common directory paths in config在配置中存储常用目录路径的最佳实践
【发布时间】:2016-12-30 18:03:41
【问题描述】:

我正在构建一个本地作业运行器,它可以执行各种维护任务,从 FTP 到数据抓取和基本分析。由于它基于一个通用文件系统运行,它需要知道在哪里可以找到某些文件夹和文件。该应用没有数据库,主要依赖 YAML 格式的配置文件。

我现在正在为这些路径设计配置文件,我想知道是否有任何与此相关的最佳实践。我尝试搜索,但只能找到配置文件 格式 之间的参数,而不是其内容的设计。

以下是我正在讨论的方法:

  1. 用常用的字典名称嵌套路径,这样它们就可以递归循环以通过 os.path 生成绝对路径

    fileserver:
      drive:
        path: Shared Files
        myfolder:
          path: MyFolder
          reports:
            path: Daily Reports
            other:
              path: Other Reports
            some:
              path: Some Reports
            some2014:
              path: Some Reports 2014
            some2015:
              path: Some Reports 2015
        another-folder:
          path: 1 - Another Folder
          reports:
            path: Daily Reports
      ip: 192.168.0.0
      path: \\MYSERVER1
    
  2. 定义通用字典名称并添加一个“父”属性,然后使用父属性走到服务器根目录。

    server:
     ip: 192.168.0.0
     path: \\MYSERVER1
    drive:
     path: Shared Files
     parent: server
    myfolder:
     path: MyFolder
     parent: drive
    myreports:
     path: Daily Reports
     parent: myfolder
    somereports:
     path: Some Reports
     parent: myreports
    some2015reports:
     path: Some Reports 2015
     parent: myreports
    
    etc...
    
  3. 在加载配置文件时使用占位符约定并将它们正则表达式为绝对路径:

    server: \\MYSERVER1
    drive: [server]\Shared Files
    myfolder: [drive]\My Folder
    
    etc.
    

在一个完美的世界中,当事情发生变化时,非技术人员很容易更新。有没有人有实施这样的经验?我认为我的任何一个解决方案都不是很好,我很想看到这种配置的生产示例。

【问题讨论】:

  • 它是相对的,取决于单个配置文件需要多少个不同的服务器/服务/文件/路径。如果答案是 1,那么我会选择你的第二个文件,但如果答案是多个,那么我会选择 1。我建议你看看 Puppet、SaltStack、Ansible 和 Chef。
  • 您应该使用第三个问题来编辑您的问题,因为格式不会显示在 cmets 上。
  • 谢谢 Emett - 我已经更新了问题。我认为第三个最容易阅读,但由于我添加了斜杠,它不会让 os.path 有机会加入它们并纠正错误。第二个和第三个都需要整个应用程序的唯一 ID,但对于一小组路径可能更容易处理。这类事情有什么指导方针吗?
  • 我不知道。这可能是一个非常自以为是的话题。也许值得对您的用户进行试运行并寻求反馈。我的选择是第一,但有一些更新。我会将它们添加到答案中,以便它们保持格式。
  • 谢谢,查理。在这个特定的驱动器中大约有 12,000 个文件夹,因此对它们进行索引并不是一个真正实用的方法。此外,如果文件夹移动并更改名称,则遍历目录并不能帮助我找到正确的位置。将这一点从代码中剔除也使代码本身更具可扩展性,例如编写一个脚本来处理基于配置文件的 2+ 个 FTP 作业。

标签: python yaml config


【解决方案1】:

1 号似乎对我来说是最具扩展性的,因此是我的选择。

我会对其进行一些更改,因为我发现它有点难以一目了然。

fileserver:
  drive:
    path: Shared Files
    myfolder:
      path: MyFolder
      reports:
        paths:
          - Daily Reports
          - Other Reports
          - Some Reports
          - Some Reports 2014
          - Some Reports 2015
    another-folder:
      path: 1 - Another Folder
      reports:
        paths:
          - Daily Reports
  ip: 192.168.0.0
  path: \\MYSERVER1

【讨论】:

  • 谢谢,艾米特!我认为针对路径数组的情况是位置依赖性 - 如果这些文件夹的名称更改或配置文件中的顺序更改,它们也需要在代码中更新,因为它们将通过类似 config["文件服务器"]["驱动器"]["报告"]["路径"][3]。我同意,尽管我的示例很难阅读,并且对于尝试更新设置的非技术人员来说可能会令人生畏。
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 2019-01-12
  • 2012-06-26
  • 1970-01-01
  • 2015-10-11
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多