Загрузка модулей по переменным конфигурации в приложении Perl Catalyst - PullRequest
3 голосов
/ 03 октября 2019

Я устанавливаю веб-приложение Catalyst для развертывания и хотел бы удалить плагины -Debug и StackTrace Catalyst из моего app.pm в производственной среде. Тем не менее, поскольку у меня есть среда тестирования, я бы хотел избежать «жесткого кодирования» этого. Вместо этого я хотел бы иметь переменную конфигурации, определяющую среду, и соответственно загружать модули. Весь исходный код находится в SVN, и было бы грязно, если бы я обновил репозиторий, а затем вручную изменил модули, которые я загружаю в app.pm.

В настоящее время приложение использует модуль configLoader для чтения * 1007. * файл со всеми конфигами, который не является версионным и дает некоторый контроль над тем, как приложение работает в среде dev, test или prod;но они читаются только после запуска приложения (следовательно, после загрузки модулей).

Вот упрощение app.pm:

package app;

use strict;
use warnings;
use Hash::Merge ();
use Sys::Hostname;

use Catalyst::Runtime '5.80';

use Catalyst qw/    
  -Debug
  StackTrace
  ConfigLoader
  SomeOtherModule
  AndYetAnotherOne
/;

__PACKAGE__->config(

  # Some local config stuff

);

# Start the application
__PACKAGE__->setup();

Есть лиспособ сделать это без необходимости использовать команду Unix, чтобы выяснить, на каком хосте запущено приложение?

1 Ответ

6 голосов
/ 03 октября 2019

Один из способов контролировать, как это работает, - через среду. От Catalyst

-Debug

Включает отладочный вывод. Вы также можете принудительно настроить этот параметр из системного окружения с помощью CATALYST_DEBUG или _DEBUG. Настройки среды переопределяют приложение, причем _DEBUG имеет наивысший приоритет.

Затем вы можете настроить все, например, с помощью драйвера, чтобы иметь возможность сначала установить переменную среды, хотя по умолчаниюснять его с производства. Это должно быть возможно автоматизировать по мере необходимости. Затем Плагин StackTrace следует примеру, так как

Этот плагин активен только в режиме -Debug по умолчанию, [...]

и такПеременная окружения может заботиться обоим.

Другой вариант - сначала перечислить плагин ConfigLoader , как сказано в его документации в Synopsis

package MyApp;

# ConfigLoader should be first in your list so
# other plugins can get the config information
use Catalyst qw( ConfigLoader ... );

Тогда вы сможете управлять StackTrace плагином и -Debug режимом или нет, отдельно.

...