Как передать переменные окружения в программы на Haskell, запускаемые через стек? - PullRequest
0 голосов
/ 24 мая 2018

Я только что заметил, что программы на Haskell, запущенные через stack, не получают переменные окружения из вызывающей среды.Вот пример программы:

-- testenv.hs
import System.Environment
main :: IO ()
main = print =<< getEnv "FOOBAR"

Если я запускаю ее без стека, вот так, она работает:

% FOOBAR=123 runhaskell testenv.hs
"123"

Но с использованием стека:

% FOOBAR=123 stack runhaskell testenv.hs
testenv.hs: FOOBAR: getEnv: does not exist (no environment variable)

То жеиспользуется при компиляции: FOOBAR=123 stack exec testenv не работает, а FOOBAR=123 .stack-work/install/BLAHBLAH/testenv работает.

Есть ли способ заставить стек проходить через определенные переменные среды?

Реальная проблема, с которой я столкнулся, заключается в yesod devel, есть некоторые настройки, которые я хочу переопределить переменными среды, но yesod devel использует стек для запуска программы, чтобы они не проходили.

Этоэто стек 1.6.5 на NixOS 18.03.132262.0a73111bc29.

1 Ответ

0 голосов
/ 24 мая 2018

Похоже, это соответствующий раздел руководства по стеку , который я пропустил:

«По умолчанию стек запускает сборку в чистой среде сборки Nix(или оболочка), что означает две важные вещи: (1) практически ни одна переменная окружения не будет перенаправлена ​​из пользовательского сеанса в оболочку nix [...] ”

Так что этот совет сработал:

«Чтобы переопределить это поведение, добавьте pure: false в ваш stack.yaml или передайте опцию --no-nix-pure в командную строку.»

% FOOBAR=123 stack --no-nix-pure runhaskell testenv.hs
"123"
...