[英]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上,有兩個常用的存儲變量數據的位置。
如果每個用戶都需要它自己的存儲,則通常在用戶主目錄中完成。 應在用戶主目錄中存儲的路徑
ENV["HOME"] + "/." + $application_name
如果所有用戶共享存儲,或者應用程序僅由一個用戶(大多數守護程序)運行,則/ 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.