Доступ к переменной среды в приложении fastcgi

Я написал приложение fastcGI, используя C и C++

У меня есть бесплатная функция, которая возвращает строку, если конкретная переменная среды не была установлена. Функция выглядит так:

namespace
{
    std::string getNameString()
    {
        char * datastr_ = getenv(MY_ENVAR.c_str());

        if (datastr_)
            return std::string(datastr_);
        return DEFAULT_NAME;
    }
};

Затем я выполняю следующие шаги (в порядке, указанном ниже)

  1. Я отредактировал мой / etc / environment и добавил соответствующую переменную окружения
  2. Я подтверждаю, что переменная была установлена, набрав printenv на консоли
  3. Я останавливаюсь и затем запускаю демон Apache

Когда я отлаживаю свое приложение, я обнаруживаю, что переменная окружения не была установлена. Я подозреваю, что среда, в которой работает приложение fastcgi, может отличаться от среды, в которой работают "обычные" приложения.

Кто-нибудь знает, как получить переменную среды в приложении fastcgi?

2 ответа

Решение

Я подозреваю, что процессы fastcgi порождаются в "очищенной" среде по умолчанию, учитывая ваши наблюдения. Apache, безусловно, предоставляет способ установки переменных среды для fastcgi. Это дает дополнительный бонус: он немного менее загадочный (кто ожидает, что веб-сервис будет вести себя по-разному при изменении /etc/environment?), Например, вы сохраняете "вещи веб-конфигурации" с "вещами веб-конфигурации".

Вы можете посмотреть здесь http://httpd.apache.org/docs/current/env.html и попытаться установить переменную env в процессе apache. Я принял последнюю версию Apache.

Другие вопросы по тегам