2016-11-19 26 views
0

我正在使用yesod-simple模板構建一個簡單的web應用程序(稱爲pkb)。我需要一堆沒有LTS-6.25最新版本的庫(當前默認爲yesod-simple),所以我將解析器更改爲stack.yaml中的lts-7.9。我也看了this issue with GHC 8.0.1和它周圍的成功合作,加入使用lts-7.9腳手架搭建yesod應用程序:`stack build` works,`stack test` works'stack exec - yesod devel` not

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

在必要時並在更改任何X{..}以明確的符號與記錄。現在我的軟件包使用stack build成功構建,單元測試使用stack test運行沒有任何問題。當我使用stack exec pkb啓動我的應用程序時,我可以訪問該網站並且一切正常。在GHCi中加載應用程序也可以正常工作(使用stack exec cabal repl,然後在提示符處輸入appMain + [Enter])。

現在,當我嘗試運行使用stack exec -- yesod devel開發服務器(用於切換到工作之前LTS-7.9)我收到以下錯誤:

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輸出,我可以看到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:error: 無法加載'Application'接口 它是隱藏包'pkb-0.0.0'的成員。' –

+0

我不是當然,這個包是什麼。我無法在hackage中看到它:http://hackage.haskell.org/package/pkb – Sibi

回答

0

臨時解決方法:

這個問題最近已經解決了耶索德代碼庫,但它尚未在耶索德主分支。要使用yesod devel和GHC 8,您可以執行以下操作(現在)。

  1. 克隆耶索德庫:https://github.com/yesodweb/yesod.git
  2. 結帳的1304-stack-based-devel分支。
  3. 運行stack install yesod-bin裏面的yesod回購。這應該安裝yesod可執行文件。確保您的可執行文件在您的$PATH上。
  4. cd到您的項目文件夾。
    1. 在您的項目中運行yesod devel(不運行stack exec -- yesod devel)。
    2. 如果事情失敗,在項目文件夾試試下面的命令,以確保沒有任何痕跡從以前的左構建:rm -rf yesod-devel dist .stack-work static/tmp && stack clean && stack build(這可能是矯枉過正,但它不會造成任何傷害,爲什麼不)。

您現在應該能夠再次運行開發服務器。

的幾點思考:

  • 要啓動交互式解釋,使用stack ghci(不stack exec cabal repl)。
  • stack buildstack test像以前一樣工作。

  • 該問題在yesod issue tracker on GitHub上進行跟蹤。

  • 這是用於此問題的pull request

0

只是猜測:你改變你的解析器後運行stack build yesod-bin?我的猜測是你正在運行一個yesod可執行文件,它是針對以前的GHC版本編譯的。

+0

謝謝你的回覆,是的,我在切換到lts-7.9後重建了yesod-bin。如果我執行'stack exec - yesod version',我看到:'yesod-bin version:1.4.18.7'。有什麼方法可以檢查這個版本是否正確(即針對GHC 8.0.1構建)? –

+0

yesod告訴你的stack exec是什麼? –

+0

它說:'/ home/sam/.stack/snapshots/x86_64-linux/lts-7.9/8.0.1/bin/yesod'。所以我想這是正確的版本。 –