简体   繁体   English

无法在Haskell Stack项目中构建yesod / amazonka依赖项

[英]Trouble building yesod/amazonka dependencies in a Haskell Stack project

I'm trying to use the excellent AWS SDK amazonka in the backend portion of an API built using the equally excellent web framework yesod , but I am having great difficulty getting the dependencies for these two libraries to work together. 我正在尝试在使用同样出色的Web框架yesod构建的API的后端部分中使用优秀的AWS SDK amazonka ,但是我很难让这两个库的依赖项协同工作。

I started the scaffolded yesod project with 我开始使用scaffolded yesod项目

stack new my-project yesod-mongo

which populated my cabal file with the most recent version of yesod (1.6.0). 用最新版本的yesod(1.6.0)填充我的cabal文件。 Naively adding the dependencies amazonka-core and amazonka-ssm (for example) to my cabal file comes back with amazonka-core将依赖性amazonka-coreamazonka-ssm (例如)添加到我的cabal文件中

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for my-project-0.0.0:
    amazonka-core must match -any, but the stack configuration has no specified version
              (latest matching version is 1.5.0)
    amazonka-ssm must match -any, but the stack configuration has no specified version
             (latest matching version is 1.5.0)
needed since my-project is a build target.

As suggested, I tried adding amazonka-core-1.5.0 and amazonka-ssm-1.5.0 to my stack.yaml file under extra-deps , but this doesn't work: 正如所建议的那样,我尝试将amazonka-core-1.5.0amazonka-ssm-1.5.0extra-deps下的stack.yaml文件中,但这不起作用:

Warning: WARNING: /home/ubuntu/my-project/my-project.cabal was modified manually.
     Ignoring package.yaml in favor of cabal file. If you want to use package.yaml
     instead of the cabal file, then please delete the cabal file.

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for amazonka-core-1.5.0:
    conduit-1.3.0.2 from stack configuration does not match >=1.1 && <1.3 (latest
                matching version is 1.2.13.1)
needed due to my-project-0.0.0 -> amazonka-core-1.5.0

After a bit of digging, it seems that the snapshot that the yesod template was built off of is lts-11.6, but the most recent snapshot that the amazonka library is included in is lts-10.9. 经过一些挖掘后,看起来yesod模板构建的快照是lts-11.6,但是亚马逊卡库中包含的最新快照是lts-10.9。 So, I tried building the project again from the yesod-mongo template, but this time specifying an older snapshot: 所以,我尝试从yesod-mongo模板再次构建项目,但这次指定了一个较旧的快照:

ubuntu:~$ stack new my-project yesod-mongo --resolver lts-10.9
Downloading template "yesod-mongo" to create project "my-project" in my-project/ ...
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- my-project/

Selected resolver: lts-10.9
Resolver 'lts-10.9' does not have all the packages to match your requirements.
    classy-prelude version 1.3.1 found
        - my-project requires ==1.4.*
    classy-prelude-conduit version 1.3.1 found
        - my-project requires ==1.4.*
    classy-prelude-yesod version 1.3.1 found
        - my-project requires ==1.4.*
    http-conduit version 2.2.4 found
        - my-project requires ==2.3.*
    persistent version 2.7.1 found
        - my-project requires ==2.8.*
    persistent-mongoDB version 2.6.0 found
        - my-project requires ==2.8.*
    yesod version 1.4.5 found
        - my-project requires ==1.6.*
    yesod-auth version 1.4.21 found
        - my-project requires ==1.6.*
    yesod-core version 1.4.37.3 found
        - my-project requires ==1.6.*
    yesod-form version 1.4.16 found
        - my-project requires ==1.6.*
    yesod-static version 1.5.3.1 found
        - my-project requires ==1.6.*
    Using package flags:
        - my-project: dev = False, library-only = False

Now I am at a loss and more than a little frustrated. 现在我感到茫然而且有点沮丧。 It seems like perhaps the template is ignoring the snapshot specification. 似乎模板可能忽略了快照规范。 So, my question: 所以,我的问题:

Is there a way to build the scaffolded site from a template that uses a specific snapshot to fill in the cabal and stack.yaml files? 有没有办法从使用特定快照填充cabal和stack.yaml文件的模板构建脚手架网站? Is there anything else I can do to get this to work? 我还能做些什么才能让它发挥作用吗?

Happy to provide more information if it's helpful. 如果它有用,很乐意提供更多信息。

Edit: I also tried bumping down the versions of the packages in the above snippet, and while this solves the issue of building dependencies, now the scaffolded site doesn't compile (presumably because things have changed in a meaningful way from yesod-1.4.5 to yesod-1.6.0). 编辑:我也尝试在上面的代码段中查看软件包的版本,虽然这解决了构建依赖项的问题,但现在脚手架网站没有编译(大概是因为事情已经从yesod-1.4以有意义的方式改变了。 5到yesod-1.6.0)。

Unfortunately you can't use Commercial Haskell's stack templates with yesod and amazonka as of now. 不幸的是,到目前为止,您无法使用商业Haskell的堆栈模板与yesod和amazonka。 The reasons being: 原因是:

The only way for you to get it working is switching back to old version of stack templates (those templates which actually worked with stackage resolver 10.9) and then using that to create a new project. 让它工作的唯一方法是切换回旧版本的堆栈模板(那些实际上与stackage解析器10.9一起使用的模板),然后使用它来创建一个新项目。 Fortunately, Stack supports custom stack templates: 幸运的是,Stack支持自定义堆栈模板:

$ stack new my-project https://raw.githubusercontent.com/github-user-id/stack-templates/master/my-template.hsfiles

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM