ruby与持久性数据

我想创buildruby应用程序(不轨)。 这是一个控制台应用程序,将需要坚持一些数据。 我使用pstore作为数据库。 我想部署这个应用程序作为一个gem

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

目前我已经创build了一个数据目录作为一个兄弟的bin目录在一个标准的gem布局。 因此,我希望这个gem能够在数据被部署后“将数据存储在它自己内部”。 但是,当我做一个本地gem安装testing,我发现数据被存储在本地的项目文件,而不是在gem目录内的某个地方。

当然,这可能是我误解了“rake install_gem”在做什么。 另外,我隐约担心,如果我需要sudo来安装gem,那它实际上能够在gem目录下创build“自身内部”的数据文件。

有人能澄清这一点吗?

谢谢。 约翰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 

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

/home/user/.application

如果每个用户都需要它自己的存储,通常在用户主目录中完成。 您在用户主目录中存储的路径应该是

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

在/ var / lib中/应用

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

  • /var/log日志
  • /var/run的PID
  • /var/lock锁定文件
  • /var/www for httpservers
  • /var/tmp不是重要但持久的数据
  • /var/lib的所有其他数据

你在/ var中的存储路径应该是

 "/var/lib/" + $application_name 

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

你绝对不想将数据存储在gem目录中。 预期的行为是用户可以卸载并重新安装宝石没有任何问题。 如果您的宝石安装目录中有数据,则卸载该宝石将会破坏该数据并将您的用户取消。

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

不要忘记让用户覆盖你的默认值。 一个方法来做到这一点将使他们非常高兴:)