2 votes

Comment construire un programme dépendant d'une application Yesod

J'ai créé une application Yesod en utilisant stack new project yesod-postgres. En plus de l'application web, je veux créer un autre programme qui utilise le même modèle de base de données et la même connexion à la base de données.

J'ai ajouté une deuxième section executable (une copie de la première) dans le fichier cabal avec un nom différent et main-is: myprogram.hs. Je peux maintenant exécuter stack build && stack exec myprogram avec succès.

Le problème est que la construction prend toujours plus d'une minute :

$ stack build
project-0.0.0: désenregistrement
yesod-persistent-1.4.0.6: configuration
yesod-persistent-1.4.0.6: construction
yesod-persistent-1.4.0.6: copie/enregistrement
yesod-form-1.4.9: configuration
yesod-form-1.4.9: construction
yesod-form-1.4.9: copie/enregistrement
yesod-auth-1.4.15: configuration
yesod-auth-1.4.15: construction
yesod-auth-1.4.15: copie/enregistrement
yesod-1.4.3.1: configuration
yesod-1.4.3.1: construction
yesod-1.4.3.1: copie/enregistrement
classy-prelude-yesod-0.12.8: configuration
classy-prelude-yesod-0.12.8: construction
classy-prelude-yesod-0.12.8: copie/enregistrement
project-0.0.0: construction
Prétraitement de la bibliothèque project-0.0.0...
Enregistrement en place de project-0.0.0...
Prétraitement du l'exécutable 'myprogram' pour project-0.0.0...
Liaison .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/myprogram/myprogram ...
Prétraitement du l'exécutable 'project' pour project-0.0.0...
Liaison .stack-work/dist/x86_64-linux/Cabal-1.22.5.0/build/project/project ...
project-0.0.0: copie/enregistrement
Installation de la bibliothèque dans
/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
Installation du(des) exécutable(s) dans
/home/jakob/projects/project/project/.stack-work/install/x86_64-linux/lts-6.27/7.10.3/bin
Enregistrement de project-0.0.0...
6 action(s) terminée(s).

Comment puis-je accélérer le processus de construction ? Comment puis-je empêcher stack de reconstruire les dépendances yesod à chaque fois ?

3voto

K. A. Buhr Points 14622

Ce n'est pas spécifique à l'ajout d'un deuxième exécutable; cela se produit même avec un projet yesod-postgres fraîchement créé avec un seul exécutable.

En fait, il semble s'agir d'un bug dans l'ensemble de packages lts-6.27 de Stack (et éventuellement d'autres?). Voici une solution de contournement. Dans votre stack.yaml, ajoutez le extra-dep suivant:

extra-deps:
- yesod-persistent-1.4.0.6

et exécutez stack build. Ensuite, un deuxième stack build devrait s'exécuter sans reconstruire quoi que ce soit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X