Доступ к переменным среды оболочки в веб-приложении Catalyst с использованием Apache/FastCGI

У меня есть веб-приложение Catalyst на экземпляре Amazon EC2 Linux, и его содержимое обслуживается Apache/FastCGI. Всякий раз, когда я запускаю новый экземпляр, мне нужно получить внутренний IP-адрес сервера базы данных и назначить его переменной среды, выполнив эту команду при запуске:

export MYSQL_HOST=$(dig +short ec2-*-*-*-*.compute-1.amazonaws.com);

У меня есть модуль perl, который должен создать соединение с базой данных после поиска значения переменной среды $MYSQL_HOST.

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

Я вижу, что вы можете использовать PassEnv из Apache mod_env для доступа к переменным среды и что вы можете назначать значения переменным среды FastCGI с помощью директивы Apache, FcgidInitialEnv (если я жестко запрограммирую значение здесь, я могу получить его с помощью моего модуля Perl) .

Мои навыки настройки Apache довольно просты, поэтому мне было интересно, может ли кто-нибудь порекомендовать способ связать их вместе, чтобы мой модуль perl мог получить доступ к $MYSQL_HOST.

Спасибо!


person glw    schedule 07.02.2012    source источник
comment
Возможно, это может помочь использовать PSGI для подключения Apache и Catalyst вместо FCGI.   -  person zgpmax    schedule 11.02.2012
comment
Это зависит от того, где вы устанавливаете переменную среды. ЕСЛИ вы хотите, чтобы процесс fcgi наследовал среду apache, это одна проблема. Другой вариант — заставить подпроцесс fcgi вычислить значение самостоятельно.   -  person djsadinoff    schedule 13.02.2012


Ответы (1)


Если вы пытаетесь прочитать переменные среды, взгляните на $c->engine->env:

use Data::Dumper;
sub debugEnv :Local
{
    my ( $self, $c ) = @_;
    $c->res->headers->header("Content-type"=> 'text/plain');
    my $req = $c->req;
    $c->response->body('$c->engine->env is : '.Dumper($c->engine->env)
                      ."c->req is $req\n"
                     .'c->config is ' .Dumper($c->config)
                      ."\nENV is : ".Dumper(\%ENV))
}
person djsadinoff    schedule 13.02.2012