代码之家  ›  专栏  ›  技术社区  ›  jschank

具有持久数据的红宝石

  •  5
  • jschank  · 技术社区  · 16 年前

    我想创建Ruby应用程序(而不是Rails)。这是一个控制台应用程序,需要保留一些数据。我正在使用pstore作为数据库。我想将此应用程序部署为gem。

    我的问题是:我的数据在哪里?

    目前,我已经创建了一个数据目录作为标准gem布局中bin目录的兄弟目录。因此,我希望gem在部署之后将其数据存储在“内部”。但是当我进行本地gem安装测试时,我发现数据存储在本地的项目文件中,而不是gems目录中的某个地方。

    当然,我可能只是不明白“rake-install-gem”在做什么。此外,我还隐约担心,如果我需要sudo来安装gem,它实际上能够在gem目录中“在其内部”创建数据文件。

    有人能解释一下吗?

    谢谢您。 约翰尚克

    @无效-谢谢你的回复。这是我的整个剧本。在/bin目录中…(我把它添加到主要问题中是因为我不熟悉如何格式化注释中的内容——粘贴的代码看起来很糟糕。

    #!/usr/bin/env ruby
    
    $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
    
    require 'timesheet'
    
    begin
      command_hash = TimesheetParser.parse
      store = YAML::Store.new("data/time_entries.yaml")
      tl = TimeLog.new(store)
      ts = Timesheet.new(tl)
      ts.process(command_hash)
    rescue Exception => e
      raise if command_hash[:debug]
      puts e.message
    
    2 回复  |  直到 16 年前
        1
  •  11
  •   johannes    16 年前

    在Linux上,有两个常用的存储变量数据的位置。

    /主页/用户/应用程序

    如果每个用户都需要自己的存储空间,这通常在用户主目录中完成。用户主目录中存储的路径应为

    ENV["HOME"] + "/." + $application_name
    

    /var/lib/应用程序

    如果所有用户共享存储,或者应用程序只由一个用户(大多数守护进程)运行,/var是存储所有类型数据的正确位置。

    • /var/log 原木
    • /var/run PID的
    • /var/lock 锁定文件
    • /var/www 对于HTTP服务器
    • /var/tmp 对于不重要但持久的数据
    • /var/lib 所有其他数据

    /var中存储的路径应该是

    "/var/lib/" + $application_name
    

    请确保此目录的权限是这样的,这样您就不必让应用程序作为根目录运行。

        2
  •  0
  •   edebill    16 年前

    您肯定不想在gem目录中存储数据。预期的行为是用户可以卸载和重新安装gems,而不会出现任何问题。如果您的gem安装目录中有数据,卸载gem将破坏这些数据并激怒您的用户。

    约翰内斯在Linux上有正确的想法。对于Mac,特定的目录会有所不同。窗户也是如此。您需要研究每个平台的目标位置,并让代码根据运行的主机类型有条件地切换存储位置。

    别忘了让用户覆盖您的默认值。这样做的方法会让他们非常高兴:)