具有持久数据的Ruby Gems

时间:2010-01-02 07:21:52

标签: ruby linux file gem

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

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

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

当然,我可能只是误解了“rake install_gem”正在做什么。另外,我模糊地担心,如果我需要sudo来安装gem,它实际上可以在gem目录中“内部”创建数据文件。

有人可以澄清这一点吗?

谢谢。 John Schank

@makevoid - 感谢您的回复。这是我的主要脚本的全部内容。在/ 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 个答案:

答案 0 :(得分:11)

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

/home/user/.application

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

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

的/ var / lib中/应用

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

  • /var/log for logs
  • /var/run代表pid的
  • /var/lock用于锁定文件
  • /var/www for httpservers
  • /var/tmp表示不重要但持久的数据
  • 所有其他数据
  • /var/lib

/ var中存储的路径应为

"/var/lib/" + $application_name

确保此目录的权限是这样的,您不必让您的应用程序以root用户身份运行。

答案 1 :(得分:0)

您绝对不希望将数据存储在gem目录中。预期的行为是用户可以毫无问题地卸载并重新安装gem。如果您的gem安装目录中有数据,卸载gem将破坏该数据并使用户感到不安。

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

不要忘记让用户覆盖您的默认值。一种方法可以让他们非常高兴:)