Как мога да стартирам уебсайт Yesod със скеле в пясъчник на Cabal?

Да приемем, че имам cabal sandbox в папка 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
Току-що открих, че някой дори е направил скрипт (използвайки стек): gist.github.com/krdlab/712defa9304069af583d :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, който автоматизира това с помощта на stackage:

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 да използва локалния sandbox (поне за мен). - person Beerend Lauwers; 08.04.2015