2016-11-19 7 views
0

yesod-simpleテンプレートを使ってYesodを使って単純なWebアプリケーション(pkb)をビルドします。 lts-6.25(最新のyesod-simpleのデフォルト)には最新バージョンがないライブラリがたくさん必要なので、リゾルバをstack.yamlのlts-7.9に変更しました。私はまた、this issue with GHC 8.0.1を読んで成功しlts-7.9を使ったScaffolded 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]と入力)。

(LTS-7.9に切り替える前に働いていた)今

私はstack exec -- yesod develを使用して開発サーバーを実行しようと、私は次のエラーを取得する:

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:エラー: '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. yesod repo内でstack install yesod-binを実行します。これにより、yesod実行ファイルがインストールされます。この実行ファイルがあなたの$PATHにあることを確認してください。
  4. cdをプロジェクトフォルダに追加します。
    1. を実行しないでください。
    2. もし失敗した場合は、プロジェクトフォルダ内の次のコマンドを実行して、以前のビルドからトレースが残っていないことを確認してください:rm -rf yesod-devel dist .stack-work static/tmp && stack clean && stack build(これは残酷かもしれませんが、

あなたは今再び、開発サーバを実行することができます。

いくつかのランダムノート:

  • stack ghci(ないstack exec cabal repl)を使用し、対話インタプリタを起動します。
  • stack buildおよびstack testは以前と同じです。

  • 問題はyesod issue tracker on GitHubで追跡されます。

  • ここにはこの問題のpull requestがあります。

0

あなたのリゾルバを変更してからstack build yesod-binを実行しましたか?私の推測では、古いGHCバージョンに対してコンパイルされたyesod実行可能ファイルを実行しているということです。

+0

あなたの返事をありがとう、はい、私はyes-binをlts-7.9に切り替えた後に再構築しました。 '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'です。だから私はそれが正しいバージョンだと思います。 –

関連する問題