如何根据 Yesod 应用程序构建程序
How to build a program depending on a Yesod application
我使用 stack new project yesod-postgres
创建了一个 Yesod 应用程序。除了 web 应用程序,我想创建另一个使用相同数据库模型和数据库连接的程序。
我在 cabal 文件中添加了第二个 executable
部分(第一个的副本),名称和 main-is: myprogram.hs
不同。我现在可以 运行 stack build && stack exec myprogram
成功了。
问题是构建总是需要超过 1 分钟:
$ stack build
project-0.0.0: unregistering
yesod-persistent-1.4.0.6: configure
yesod-persistent-1.4.0.6: build
yesod-persistent-1.4.0.6: copy/register
yesod-form-1.4.9: configure
yesod-form-1.4.9: build
yesod-form-1.4.9: copy/register
yesod-auth-1.4.15: configure
yesod-auth-1.4.15: build
yesod-auth-1.4.15: copy/register
yesod-1.4.3.1: configure
yesod-1.4.3.1: build
yesod-1.4.3.1: copy/register
classy-prelude-yesod-0.12.8: configure
classy-prelude-yesod-0.12.8: build
classy-prelude-yesod-0.12.8: copy/register
project-0.0.0: build
Preprocessing library project-0.0.0...
In-place registering project-0.0.0...
Preprocessing executable 'myprogram' for project-0.0.0...
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/myprogram/myprogram ...
Preprocessing executable 'project' for project-0.0.0...
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/project/project ...
project-0.0.0: copy/register
Installing library in
/home/jakob/projects/project/project/.stack-work/install/x86_64-linux/lts-6.27/7.10.3/lib/x86_6
4-linux-ghc-7.10.3/project-0.0.0-1qruVQVcU0k2yXxF1Z1w7r
Installing executable(s) in
/home/jakob/projects/project/project/.stack-work/install/x86_64-linux/lts-6.27/7.10.3/bin
Registering project-0.0.0...
Completed 6 action(s).
如何加快构建过程?如何防止堆栈每次都重建 yesod 依赖项?
这不是特定于添加第二个可执行文件;即使是带有单个可执行文件的新 yesod-postgres
项目也会发生这种情况。
相反,它似乎是 Stack 的 lts-6.27
软件包集(可能还有其他软件包?)中的错误。这是一个解决方法。在您的 stack.yaml
中,添加以下 extra-dep:
extra-deps:
- yesod-persistent-1.4.0.6
和运行stack build
。然后,第二个 stack build
应该 运行 而无需重建任何东西。
我使用 stack new project yesod-postgres
创建了一个 Yesod 应用程序。除了 web 应用程序,我想创建另一个使用相同数据库模型和数据库连接的程序。
我在 cabal 文件中添加了第二个 executable
部分(第一个的副本),名称和 main-is: myprogram.hs
不同。我现在可以 运行 stack build && stack exec myprogram
成功了。
问题是构建总是需要超过 1 分钟:
$ stack build
project-0.0.0: unregistering
yesod-persistent-1.4.0.6: configure
yesod-persistent-1.4.0.6: build
yesod-persistent-1.4.0.6: copy/register
yesod-form-1.4.9: configure
yesod-form-1.4.9: build
yesod-form-1.4.9: copy/register
yesod-auth-1.4.15: configure
yesod-auth-1.4.15: build
yesod-auth-1.4.15: copy/register
yesod-1.4.3.1: configure
yesod-1.4.3.1: build
yesod-1.4.3.1: copy/register
classy-prelude-yesod-0.12.8: configure
classy-prelude-yesod-0.12.8: build
classy-prelude-yesod-0.12.8: copy/register
project-0.0.0: build
Preprocessing library project-0.0.0...
In-place registering project-0.0.0...
Preprocessing executable 'myprogram' for project-0.0.0...
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/myprogram/myprogram ...
Preprocessing executable 'project' for project-0.0.0...
Linking .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/project/project ...
project-0.0.0: copy/register
Installing library in
/home/jakob/projects/project/project/.stack-work/install/x86_64-linux/lts-6.27/7.10.3/lib/x86_6
4-linux-ghc-7.10.3/project-0.0.0-1qruVQVcU0k2yXxF1Z1w7r
Installing executable(s) in
/home/jakob/projects/project/project/.stack-work/install/x86_64-linux/lts-6.27/7.10.3/bin
Registering project-0.0.0...
Completed 6 action(s).
如何加快构建过程?如何防止堆栈每次都重建 yesod 依赖项?
这不是特定于添加第二个可执行文件;即使是带有单个可执行文件的新 yesod-postgres
项目也会发生这种情况。
相反,它似乎是 Stack 的 lts-6.27
软件包集(可能还有其他软件包?)中的错误。这是一个解决方法。在您的 stack.yaml
中,添加以下 extra-dep:
extra-deps:
- yesod-persistent-1.4.0.6
和运行stack build
。然后,第二个 stack build
应该 运行 而无需重建任何东西。