Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Установка модулей с параметрами подключения к БД


Автор: errrrr 9.4.2009, 20:39
Есть скрипт и модули, использующие в своей работе БД. Нужно передать их заказчику (предполагается, что MySQL и прочие необходимые вещи у него уже установлены).
Перед выполнением Makefile.pl и тестов нужно, чтобы уже существовали БД и пользователь, от имени которого будем подключаться.  Т.е. весь вопрос в том, каким образом устанавливать в своём скрипте пользовательские хост/порт/пользователя/пароль и кто должен создавать объекты БД.
Требовать от пользователя сделать всё вручную перед установкой (включая правку моего скрипта, чтобы установить его параметры БД)?
В общем, хотелось бы знать как это принято делать.

Автор: shamber 9.4.2009, 21:11
Уважаемый errrrr, лично я создавал таблицы MySQL в скрипте "сам". Ставил DBI драйвер-> создание БД-> создание таблиц

Автор: sir_nuf_nuf 10.4.2009, 00:22
Хм, а может стоит
а) вынести конфиг базы (хост, порт, имя и т.п) в отдельный файл - дабы заказчик мог их выбрать сам ? (ну допустим конфиг приложения)
б) в систему сборки (Makefile) добавить отдельный трагет "installdb", а "install" сделать от него зависимым.
в) в таргете installdb  -  запускать скрипт, который создает схему БД (можно хоть чистый SQL, а можно интерактивный, который будет спрашивать параметры у пользователя, а заодно создавать конфиг для вашего модуля..)


Автор: errrrr 10.4.2009, 20:58
Цитата(sir_nuf_nuf @ 10.4.2009,  00:22)
Хм, а может стоит
а) вынести конфиг базы (хост, порт, имя и т.п) в отдельный файл - дабы заказчик мог их выбрать сам ? (ну допустим конфиг приложения)
б) в систему сборки (Makefile) добавить отдельный трагет "installdb", а "install" сделать от него зависимым.
в) в таргете installdb  -  запускать скрипт, который создает схему БД (можно хоть чистый SQL, а можно интерактивный, который будет спрашивать параметры у пользователя, а заодно создавать конфиг для вашего модуля..)

Думаю это то, что нужно, но не знаю как имеено делать.
Дистрибутив делаю с помощью module-starter (h2xs) - он выдаёт Makefile.PL. Я так понимаю, что чтобы привязать свой скрипт к запуску make'ом нужно его вписать каким-то параметром в "Makefile.PL".

И ещё: объясните, плиз, как именно обращаться с конфиг-файлом в *nix из перл, где должен лежать и в каком виде хранить пароль.

Наверное это стандартные вещи, но не нашел ничего толкового.  smile 

Автор: sir_nuf_nuf 11.4.2009, 18:37
обращаться - как вам угодно. Т.е способов столько, что перечислять бессмысленно. 
Поищите в инете - что то типа "parsing configs with perl"

Где должен находится: зависит от вашего модуля. Если это отдельное приложение (программа), то в /etc или /usr/local/etc
(в общем случае в $PERFIX/etc)

Как дописать это к Makefile.PL - читайте документацию по ExtUtils::MakeMaker



Автор: errrrr 12.4.2009, 19:13
Таки да, нашел. Называется PL_FILES.
Насчет файла конфигурации в общем-то всё понятно, но не ясно как лучше. По аналогии с win параметры можно хранить общими для всех или только для конкретного пользователя и гарантированно можно узнать путь к соответствующей папке системными функциями или чтением реестра, чтобы не хардкодить. В убунте обнаружилась только переменная окружения "HOME", но это не то.
Что можете посоветовать по поводу безопасности? - пароль к БД придется хранить в открытом виде. Нашел несколько обсуждений на эту тему - там все сводится к ограничениям средствами файловой системы.

Автор: sir_nuf_nuf 13.4.2009, 20:47
Ну вообщем по поводу безопасности - у вас скорее всего нет другого выбора.
Но я думаю проблема решается так:
1) сервер БД не открывает доступ кому попало (т.е. только нужным хостам)
2) на файл конфигурации накладываем права -rw-------        0600 - т.е. доступ только владельцу

это решит большинство проблем.


По поводу того, как правильно - не заморачивайтесь сильно. Сделай лучше "просто". 
Правильного решения в такой задачи просто нет, о чем говорит разнообразие файлов конфигурации в UNIX

Автор: errrrr 14.4.2009, 19:58
Ok, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)