2016-11-19 1 views
0

yesod-simple 템플릿을 사용하여 Yesod를 사용하여 간단한 웹 응용 프로그램 (pkb)을 구축하고 있습니다. lts-6.25에 최신 버전이없는 라이브러리가 필요합니다 (yesod-simple의 현재 기본값). 따라서 resolver를 stack.yaml에서 lts-7.9로 변경했습니다. 또한 this issue with GHC 8.0.1를 읽고 성공적으로lts-7.9로 스캐 폴딩 된 Yesod 응용 프로그램 :`stack build`가 작동합니다.`stack test`가 작동하지 않습니다. stack exec-yesod devel`이 없습니다.

{-# LANGUAGE NoDisambiguateRecordFields #-} 
{-# LANGUAGE NoRecordWildCards   #-} 

를 추가 필요한 경우와 기록에 명시 적으로 표기 모든 X{..}을 변경하여 주위했다. 이제 내 패키지는 stack build을 사용하여 성공적으로 빌드되며 단위 테스트는 stack test을 사용하여 아무런 문제없이 실행됩니다. stack exec pkb을 사용하여 응용 프로그램을 시작하면 웹 사이트를 방문 할 수 있으며 모든 기능이 정상적으로 작동합니다. GHCi에 응용 프로그램을 로딩해도 괜찮습니다 (stack exec cabal repl을 사용하고 프롬프트에 appMain + [Enter] 입력).

app/devel.hs:2:1: error: 
Failed to load interface for ‘Application’ 
It is a member of the hidden package ‘[email protected]’. 
It is a member of the hidden package ‘[email protected]’. 

stack exec -- yesod -v devel의 출력을 보면, 내가 볼 수 있습니다 : (- 7.9 LTS로 전환하기 전에 작업하는 데 사용) 나는 다음과 같은 오류가

는 지금은 stack exec -- yesod devel를 사용하여 개발 서버를 실행하려고하면 pkb 패키지가 검색 할 디렉토리 목록에 있습니다. 또한, pkb 패키지를로드하는 데 필요한 모든 파일이 존재 :

$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/pkgdb 
total 12 
-rw-r--r-- 1 sam sam 5738 Nov 19 20:26 package.cache 
-rw-r--r-- 1 sam sam 2536 Nov 19 20:26 pkb-0.0.0-AeggierDgKl46ITEmuA1C2.conf 
$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/lib/x86_64-linux-ghc-8.0.1 
total 4 
drwxr-xr-x 6 sam sam 4096 Nov 19 20:26 pkb-0.0.0-AeggierDgKl46ITEmuA1C2 
$ ls -l .stack-work/install/x86_64-linux/lts-7.9/8.0.1/bin 
total 27440 
-rwxr-xr-x 1 sam sam 28094672 Nov 19 20:26 pkb 

그래서 왜 pkb 패키지는 여전히이 오류 메시지에 따라 '숨겨진'입니까?

위의 명령의 결과는 here입니다.
자세한 정보가 필요하면 알려 주시면 기꺼이 제공해 드리겠습니다.

+0

로그를 보면 여러 버전의'pkb'가있는 것 같습니다. 짐작 :'.stack-work'을 제거하고 다시 작동하는지 확인하십시오. – Sibi

+0

불행히도 이것은 작동하지 않습니다. 'app/devel.hs : 2 : 1 : 오류 : 'Application'에 대한 인터페이스를로드하지 못했습니다. 숨겨진 패키지 'pkb-0.0.0'의 멤버입니다. ' –

+0

저는 아니에요. 물론,이 패키지가 무엇인지. 나는 hackage에서 그것을 볼 수 없다 : http://hackage.haskell.org/package/pkb – Sibi

답변

0

임시 해결 방법 :

이 문제는 최근 yesod 코드 기반에서 해결되었습니다하지만 yesod 마스터 브랜치에 아직 없습니다. yesod devel 및 GHC 8을 사용하려면 다음을 수행하십시오 (현재).

  1. 복제하려면 yesod 저장소 : https://github.com/yesodweb/yesod.git
  2. 를 체크 아웃 1304-stack-based-devel 지점입니다.
  3. yesod repo 안에 stack install yesod-bin을 실행하십시오. 실행 파일 yesod을 설치해야합니다. 이 실행 파일이 $PATH에 있는지 확인하십시오.
  4. cd을 프로젝트 폴더에 추가하십시오.
    1. 프로젝트 내에서 yesod devel을 실행하십시오 (stack exec -- yesod devel을 실행하지 마십시오).
    2. 무언가가 실패하면 프로젝트 폴더에서 다음 명령을 실행하여 이전 빌드에서 남은 흔적이 없는지 확인하십시오. (과도 할 수도 있지만 아무런 해를 끼치 지 않습니다.)

이제 다시 개발 서버를 실행할 수 있습니다.

일부 무작위 노트 :

  • 가, 대화 형 인터프리터를 시작 stack ghci (안 stack exec cabal repl)를 사용합니다.
  • stack buildstack test은 이전과 동일합니다.

  • 문제는 yesod issue tracker on GitHub에서 추적됩니다.

  • 여기에이 문제는 pull request입니다.

0

리졸버 변경 이후 stack build yesod-bin를 실행 했습니까? 내 생각 엔 이전 GHC 버전에 맞게 컴파일 된 yesod 실행 파일을 실행하고 있다는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 예, lts-7.9로 전환 한 후 yesod-bin을 다시 작성했습니다. 'stack exec - yesod version'을 실행하면'yesod-bin version : 1.4.18.7'을 볼 수 있습니다. 올바른 버전을 확인하는 방법이 있습니까 (예 : GHC 8.0.1 빌드)? –

+0

yesod가 말하는 스택 exec은 무엇입니까? –

+0

그것은'/ home/sam/.stack/snapshots/x86_64-linux/lts-7.9/8.0.1/bin/yesod'라고 말합니다. 그래서 나는 그것이 올바른 버전이라고 생각합니다. –