Suave与netcoreapp2.0

时间:2018-04-22 22:11:28

标签: linux f# .net-core suave

我一直在关注这个Suave教程: https://legacy.gitbook.com/book/theimowski/suave-music-store/details

总的来说这看起来不错。但是,我试图让它与Linux一起工作,出于某种原因,当TargetFramework设置为" net461"时,我无法用代码编译它。 (找不到目标框架),所以我尝试将其更改为" netcoreapp2.0"。它已编译,但我后来遇到了问题: https://theimowski.gitbooks.io/suave-music-store/content/en/css.html

最后它说要添加一个WebPart: pathRegex "(.*)\.(css|png)" >=> Files.browseHome

对我失败了。所有编译,但我得到

This page isn’t working localhost didn’t send any data.

我看了一下Suave的源代码,结果发现" Files.browseHome"在" ctx.runtime.homeDirectory"下搜索文件。

我注意到我的机器设置为: /home/<my_user_name>/.nuget/packages/suave/2.2.1/lib/netstandard1.6 显然,这不是我的项目目录,所以难怪它无法找到该文件。

我的问题是:为了让我的Suave应用程序使用Files.browseHome正确处理我的css / png文件,我该怎么做?

编辑: 刚刚发现用以下内容替换WebPart: pathRegex "(.*)\.(css|png)" >=> Files.browse "/home/<my_username>/<path_to_my_project>/bin/Debug/netcoreapp2.0/" 工作正常,但看起来很难看。知道如何让它变得更好吗?基本上我不想被迫在任何地方硬编码绝对路径。

1 个答案:

答案 0 :(得分:3)

我认为答案可以在https://suave.io/files.html找到,建议按如下方式创建配置:

let config =
  { defaultConfig with homeFolder = Some (Path.GetFullPath "./public") }

Path.GetFullPath返回的路径取决于应用启动时看到的当前工作目录(反过来,这取决于您启动应用的方式:从命令行,来自systemd单元文件等)这里有太多可能的变量可以为我提供准确的说明,但如果你的启动方法可以cd在启动Suave服务器之前进入适当的文件夹,那么应该解决你的问题。

如果您在正确设置当前工作目录时遇到困难,那么您只需硬编码配置中的完整路径:

let config =
  { defaultConfig with homeFolder = Some "/home/<your_username>/<path_to_your_project>/bin/Debug/netcoreapp2.0/" }

但那种丑陋,而不是真正的便携式(一旦部署应用程序,你就必须再次修改这条路径)。因此,我建议您确保启动脚本向cd执行正确的位置,然后使用Path.GetFullPath使用相对路径。或者,您可以在app启动时读取配置文件,您可以在其中指定主路径,或者将其作为环境变量传递...各种可能性。只需确保您的代码可以在启动时传递一些指定正确的&#34; home&#34;文件夹,然后把它放在你已经显示的Suave配置中,这应该解决它。