Как я могу запустить созданный шаблонами веб-сайт Yesod в изолированной программной среде клики?

Допустим, у меня есть песочница клики в папке root, и я установил в нее пакеты yesod. Затем я делаю:

root> yesod init

Я выполняю подсказки и получаю папку project внутри root.

yesod devel, по-видимому, не поддерживает передачу ему аргументов песочницы, поэтому любые пакеты, которые я устанавливаю в песочнице, не видны созданному сайту Yesod (и я не хочу устанавливать все в глобальном пространстве, потому что это невозможно управлять и повторить).

Я попробовал здесь , но это дает мне эти ошибки:

root> runhaskell -no-user-package-db -package-db=.cabal-sandbox\x86_64-windows-ghc-7.8.4-packages.conf.d project/app/main.hs

project\app\main.hs:2:8:
  Could not find module `Application'
  Use -v to see a list of the files searched for.

Запуск внутри root/project:

root/project> runhaskell -no-user-package-db -package-db=../.cabal-sandbox\x86_64-windows-ghc-7.8.4-packages.conf.d app/main.hs

Foundation.hs:6:8:
  Could not find module `Text.Jasmine'
  Use -v to see a list of the files searched for.

Settings.hs:8:8:
  Could not find module `ClassyPrelude.Yesod'
  Use -v to see a list of the files searched for.

Settings.hs:14:8:
  Could not find module `Database.Persist.Sqlite'
  Perhaps you meant
    Database.Persist.Sql (from persistent-2.1.2)
    Database.Persist.Sql.Util (from persistent-2.1.2)
    Database.Persist.Class (from persistent-2.1.2)
  Use -v to see a list of the files searched for.

Settings\StaticFiles.hs:4:8:
  Could not find module `Yesod.Static'
  Use -v to see a list of the files searched for.

Кто-нибудь знает флаг, который я могу установить или что-то в этом роде?


person Beerend Lauwers    schedule 01.04.2015    source источник
comment
это было давно, но если вы просто запустите песочницу, в которой вы создали свой сайт (cabal sandbox init --sandbox=[path to yesod-sandbox]), она должна работать (хотя на нее будут установлены дополнительные пакеты) - в качестве альтернативы я думаю, что это также сработает, если вы просто запустите новую песочницу (cabal sandbox init с cabal install --dependencies-only), но тогда вы снова получите все пакеты   -  person Random Dev    schedule 01.04.2015
comment
Я только что обнаружил, что кто-то даже сделал скрипт (используя стек): /а> :D   -  person Random Dev    schedule 01.04.2015
comment
Спасибо @CarstenKönig, это работает! Я буду ограничен одним экземпляром Yesod для тестирования, но не думаю, что это будет проблемой.   -  person Beerend Lauwers    schedule 01.04.2015
comment
@CarstenKönig, поскольку ваш комментарий разрешил вопрос, не могли бы вы опубликовать его как ответ, чтобы удалить этот вопрос из очереди без ответа?   -  person sclv    schedule 06.04.2015
comment
@sclv хорошо - спасибо за напоминание - иногда трудно сказать   -  person Random Dev    schedule 06.04.2015


Ответы (1)


Это должно работать:

просто запустите песочницу, в которой вы создали свой сайт

cabal sandbox init --sandbox=[path to yesod-sandbox]

или просто запустите новую песочницу

cabal sandbox init 
cabal install --dependencies-only

сценарий

есть даже скрипт, написанный KrdLab, который автоматизирует это с помощью стека:

wget http://www.stackage.org/lts/cabal.config
cabal update
cabal sandbox init
cabal install alex happy yesod-bin
export PATH=./.cabal-sandbox/bin:$PATH
yesod init --bare
cabal install -j --enable-tests --max-backjumps=-1 --reorder-goals
yesod devel
person Random Dev    schedule 06.04.2015
comment
Именно флаг --bare заставил Yesod использовать локальную песочницу (по крайней мере, для меня). - person Beerend Lauwers; 08.04.2015