Автор Тема: модуль для создания файла настроек  (Прочитано 7508 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
модуль для создания файла настроек
« : 19 Декабря 2004, 19:31:30 »
Я тут неспеша свою CMS пописываю.
Возникло понимание, что настройки пользователь должен иметь возможность редактировать не только в текстовом файле, но и через веб-интерфейс.
Проблема в том, что хочется оставить этот файл модулем Перл. Так как файл сам по себе редактируется редко, а зато используется при каждом запуске. Поэтому парсить каждый раз по меньшей мере глупо.
Ещё проблема, в настройках используются не только обычные переменные, но и массивы, и хеши, и массивы хешей. Есть ли готовый модуль, или придётся сочинять самому?
Ну к чему все это, лучше бы водки выпили...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
модуль для создания файла настроек
« Ответ #1 : 19 Декабря 2004, 19:51:35 »
glebushka
IMHO выбирать прийдется только 1\\одно из двух;
Мне проще делать дамп хеш массива переменных и массивов (что, впрочем я обычно и делаю)...
Но тогда отпадает возможность редактирования в текстовом режиме.

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

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
модуль для создания файла настроек
« Ответ #2 : 19 Декабря 2004, 19:51:46 »
Врядли именно такой есть.
http://search.cpan.org/search?query=Config&mode=all
Мне нравится Config::IniFiles, но он не подходит под твое описание.
The documentations is your friend

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
модуль для создания файла настроек
« Ответ #3 : 19 Декабря 2004, 19:57:53 »
А почему бы не воспользоваться кэшированием? Хранишь настройки в любом удобном для редактирования формате, а потом кэшируешь их в произвольную структуру Perl и подключаешь посредством require.
There Is More Than One Way To Do It (c)

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
модуль для создания файла настроек
« Ответ #4 : 19 Декабря 2004, 20:02:12 »
2NetFly
Цитировать
а потом кэшируешь их в произвольную структуру Perl

Можно этот момент пояснить?

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
модуль для создания файла настроек
« Ответ #5 : 19 Декабря 2004, 20:23:30 »
Допустим, храним конфигурационный файл в ini, а кэшируем в хеш хешей (или в любой другой удобной форме), чтоб сэкономить время на парсинге. Изменяем ini, кэш обновляется. И удобно и быстро.

Если я правильно понял вопрос %)
There Is More Than One Way To Do It (c)

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
модуль для создания файла настроек
« Ответ #6 : 19 Декабря 2004, 20:30:34 »
2NetFly
AFAIK слово "кешировать" имеет несколько другое значение.
Я захожу в ini файл нотепадом, редактирую, сохраняю, а теперь мне еще и скрипт запустить для создания дампа хеша?

Может быть, только вот насколько показывает практика, пользователи зачастую забывают о более мелких вещах, чем это...

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
модуль для создания файла настроек
« Ответ #7 : 19 Декабря 2004, 20:40:21 »
Этот процесс можно автоматизировать. При кэшировании (создании дампа структуры) запоминаем дату изменения исходного конфигурационного файла. Этой информации достаточно для того, чтоб узнать, обновился ли конфиг и, в случае необходимости, перечитать его и обновить кэш. Мне достаточно даты, но я уверен, существуют более "правильные" способы узнать, нужно ли обновлять кэш.
There Is More Than One Way To Do It (c)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
модуль для создания файла настроек
« Ответ #8 : 19 Декабря 2004, 20:44:02 »
Цитировать
glebushka:
Ещё проблема, в настройках используются не только обычные переменные, но и массивы, и хеши, и массивы хешей. Есть ли готовый модуль, или придётся сочинять самому?

есть Data::Dumper :)
 в исканиях.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
модуль для создания файла настроек
« Ответ #9 : 19 Декабря 2004, 20:52:36 »
1. Какой модуль использовать для сохранения структуры и последующего извлечения? Data::Dumper, Storable
2. Насколько я понимаю, любое из этих решений будет работать медленнее простого перл-модуля (я подключаю его через use).
И мне тоже нравится Config::IniFiles (спасибо NeoNox что в своё время ткнул носом в этот модуль:)). Думаю производительность будет одинаковая.
Просто хочется сделать правильно. Если отношение частоты изменения настроек к их чтению 1 к миллиону, то логичнее оптимизировать операцию чтения.

ЗЫ. Ну с кешированием тут всё понятно, в крон подвесить задание, что если время изменения конфигарционного файла больше времени изменения кеша. То запускать скрипт, который исправит эту незадачу.
Ну к чему все это, лучше бы водки выпили...

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
модуль для создания файла настроек
« Ответ #10 : 19 Декабря 2004, 21:08:58 »
Data::Dumper подготовит для тебя структуру, которую ты можешь сохранить в файл и подключить используя require, или же считать из файла в переменную и сделать eval. В первом случае никаких потерь производительности не будет.

С кроном - это ты как-то сложно придумал. Лично у меня создание кэша, проверка того, не устарел ли он, и прочие схожие действия реализованы в отдельном классе, который отвечает за работу с конфигурационным файлом.

Кстати, если у тебя в системе присутствует один конфиг приемлемых размеров, может не стоит заморачиваться ни с кэшированием, ни с каким-либо другим способом оптимизации по скорости? Время, затрачиваемое на чтение и парсинг конфига довольно незначительное.
There Is More Than One Way To Do It (c)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
модуль для создания файла настроек
« Ответ #11 : 19 Декабря 2004, 21:29:29 »
2NetFly, не для того я переписывал код под mod_perl, чтобы терять скорость на парсинге конфигов:)
Кривизны моих рук достаточно, чтобы свести преимущества мод_перл на нет, даже без парсинга конфигов:)
Вообщем понял, пошёл читать доки по Data::Dumper.
Цитировать
2NetFly:
Лично у меня создание кэша, проверка того, не устарел ли он, и прочие схожие действия реализованы в отдельном классе, который отвечает за работу с конфигурационным файлом.


Какая разница ООП или нет? В любом случае запускать по крону нужно. (проверять каждый раз при запуске скрипта не самая лучшая идея в смысле оптимизации).
Ну к чему все это, лучше бы водки выпили...

Оффлайн 2NetFly

  • Модератор
  • Глобальный модератор
  • Постоялец
  • *****
  • Сообщений: 144
  • +0/-0
  • 0
    • Просмотр профиля
    • http://feotast.net
модуль для создания файла настроек
« Ответ #12 : 19 Декабря 2004, 21:54:17 »
Я не об ООП говорил, а о том, чтоб возложить обязанности по проверке того, не устарел ли кэш, на сам скрипт. Получение информации о дате последней модификации и один оператор сравнения - по-моему на этом экономить - фанатизм.
There Is More Than One Way To Do It (c)

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
модуль для создания файла настроек
« Ответ #13 : 19 Декабря 2004, 22:51:44 »
Цитировать
glebushka:
 Какой модуль использовать для сохранения структуры и последующего извлечения? Data:umper, Storable

тебе нужен Dumper если ты хочешь автоматически создавать нечто типа модуля с конфигом.
Storable не подойдет, т.к. хранит данные в своем двоичном формате, т.е. придется восстанавливать через него
 в исканиях.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
модуль для создания файла настроек
« Ответ #14 : 19 Декабря 2004, 22:59:53 »
Цитировать
glebushka:
ЗЫ. Ну с кешированием тут всё понятно, в крон подвесить задание, что если время изменения конфигарционного файла больше времени изменения кеша. То запускать скрипт, который исправит эту незадачу.

а зачем? имхо если у тебя под mod_perl все висит, то в случае изменения конфига достаточно сам конфиг перезагрузить. и забить на тех недоумков, которые будут "править в блокноте", потом загружать на сервер и после чего забудут нажать кнопку "reset\'
если нормально все будет правиться через веб конечно

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28