Драгоценные камни Ruby с Персистентными данными

Я хочу создать рубиновое приложение (не направляющие). Это - консольное приложение, которое должно будет сохранить некоторые данные. Я использую 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
5
задан jschank 2 January 2010 в 21:42
поделиться

2 ответа

В Linux есть два часто используемых места для хранения переменных данных.

/home/user/.application

Если каждому пользователю нужно собственное хранилище, то это обычно делается в домашнем каталоге пользователя. Путь к вашему хранилищу в домашнем каталоге users должен быть

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

/var/lib/application

Если все пользователи совместно используют хранилище, или приложение предназначено для запуска только одним пользователем (большинство демонов), то /var - это подходящее место для хранения всех типов данных.

  • /var/log для логов
  • /var/run для pid
  • /var/lock для lock-файлов
  • /var/ww для httpservers
  • /var/tmp для не важных, но сохраняемых данных
  • /var/lib для всех остальных данных

Путь к вашему хранилищу в /var должен быть

"/var/lib/" + $application_name

Убедитесь в том, что он является правильным, разрешения для этого каталога таковы, что вам не нужно позволять вашему приложению запускаться от имени root.

11
ответ дан 13 December 2019 в 19:28
поделиться

Вы определенно не хотите хранить данные в каталоге gem. Ожидаемое поведение заключается в том, что пользователи могут удалять и переустанавливать драгоценные камни без каких-либо проблем. Если у вас есть данные в установленном каталоге gems, деинсталляция gems уничтожит эти данные и разозлит ваших пользователей.

johannes имеет правильные идеи для использования под Linux. Для Mac конкретные каталоги были бы немного другими. То же самое касается и Windows. Вам нужно будет исследовать, какие места подходят для каждой платформы, на которую вы хотите нацелиться, и ваш код условно переключает места хранения в зависимости от того, на каком хосте он работает.

Не забудьте дать пользователям возможность переопределить ваши настройки по умолчанию. Способ сделать это их порадует :)

.
0
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: