Я хочу создать рубиновое приложение (не направляющие). Это - консольное приложение, которое должно будет сохранить некоторые данные. Я использую pstore в качестве базы данных. Я хочу развернуть это приложение как драгоценный камень.
Мой вопрос: где мои данные живут?
В настоящее время я создавал каталог данных как одноуровневый элемент к каталогу bin в стандартном расположении драгоценного камня. Я был бы поэтому, ожидать, что драгоценный камень хранил бы свои данные "в себе" после того, как он развертывается. Но когда я делаю локальную установку драгоценного камня на тесте, я нахожу, что данные хранятся локально в файлы проекта, не где-нибудь в каталоге драгоценных камней.
Конечно, это могло быть, я просто неправильно понимаю то, что "делают грабли install_gem". Кроме того, я неопределенно волнуюсь что, если я должен к sudo установить драгоценный камень, что он на самом деле сможет создать файл данных "в себе" в каталоге драгоценного камня.
Кто-то может разъяснить это немного?
Спасибо. 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 есть два часто используемых места для хранения переменных данных.
Если каждому пользователю нужно собственное хранилище, то это обычно делается в домашнем каталоге пользователя. Путь к вашему хранилищу в домашнем каталоге users должен быть
ENV["HOME"] + "/." + $application_name
Если все пользователи совместно используют хранилище, или приложение предназначено для запуска только одним пользователем (большинство демонов), то /var - это подходящее место для хранения всех типов данных.
/var/log
для логов/var/run
для pid/var/lock
для lock-файлов/var/ww
для httpservers/var/tmp
для не важных, но сохраняемых данных/var/lib
для всех остальных данныхПуть к вашему хранилищу в /var должен быть
"/var/lib/" + $application_name
Убедитесь в том, что он является правильным, разрешения для этого каталога таковы, что вам не нужно позволять вашему приложению запускаться от имени root.
Вы определенно не хотите хранить данные в каталоге gem. Ожидаемое поведение заключается в том, что пользователи могут удалять и переустанавливать драгоценные камни без каких-либо проблем. Если у вас есть данные в установленном каталоге gems, деинсталляция gems уничтожит эти данные и разозлит ваших пользователей.
johannes имеет правильные идеи для использования под Linux. Для Mac конкретные каталоги были бы немного другими. То же самое касается и Windows. Вам нужно будет исследовать, какие места подходят для каждой платформы, на которую вы хотите нацелиться, и ваш код условно переключает места хранения в зависимости от того, на каком хосте он работает.
Не забудьте дать пользователям возможность переопределить ваши настройки по умолчанию. Способ сделать это их порадует :)
.