簡體   English   中英

具有持久數據的Ruby Gems

[英]Ruby Gems with Persistent data

我想創建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

在Linux上,有兩個常用的存儲變量數據的位置。

/home/user/.application

如果每個用戶都需要它自己的存儲,則通常在用戶主目錄中完成。 應在用戶主目錄中存儲的路徑

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

在/ var / lib中/應用

如果所有用戶共享存儲,或者應用程序僅由一個用戶(大多數守護程序)運行,則/ var是存儲所有類型數據的正確位置。

  • /var/log用於日志
  • /var/run for pid's
  • /var/lock用於鎖定文件
  • /var/www for httpservers
  • /var/tmp表示不重要但持久的數據
  • /var/lib用於所有其他數據

存儲在/ var中的路徑應該是

"/var/lib/" + $application_name

確保此目錄的權限是這樣的,您不必讓您的應用程序以root身份運行。

您絕對不希望將數據存儲在gem目錄中。 預期的行為是用戶可以毫無問題地卸載並重新安裝gem。 如果您的gem安裝目錄中有數據,卸載gem將破壞該數據並使您的用戶感到不舒服。

johannes有正確的想法在Linux上使用。 對於Mac,特定目錄會有所不同。 Windows也是如此。 您需要研究您想要定位的每個平台的正確位置,並讓您的代碼根據其運行的主機類型有條件地切換存儲位置。

不要忘記讓用戶覆蓋您的默認值。 一種方法,這將使他們非常高興:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM