我一直在学习这个 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/"
工作正常,但看起来很难看。知道如何让它变得更好吗?基本上我不想被迫在任何地方硬编码绝对路径。
最佳答案
我认为答案可以在https://suave.io/files.html 中找到。 ,建议按如下方式创建配置:
let config =
{ defaultConfig with homeFolder = Some (Path.GetFullPath "./public") }
Path.GetFullPath
返回的路径将取决于您的应用启动时看到的当前工作目录(这又取决于您启动应用的方式:从命令行,来自 systemd 单元文件等)这里可能的变量太多,我无法为您提供准确的说明,但是如果您的启动方法可以在启动 Suave 之前将 cd
放入适当的文件夹服务器,那么这应该可以解决您的问题。
如果您在正确设置当前工作目录时遇到困难,那么您可以在配置中硬编码完整路径:
let config =
{ defaultConfig with homeFolder = Some "/home/<your_username>/<path_to_your_project>/bin/Debug/netcoreapp2.0/" }
但这有点丑陋,而且不太便携(部署应用程序后,您必须再次修改该路径)。因此,我建议确保您的启动脚本执行 cd
到正确位置的方法,然后使用具有相对路径的 Path.GetFullPath
。或者,您可以拥有一个在应用程序启动时读取的配置文件,您可以在其中指定主路径,或者将其作为环境变量传递……各种可能性。只需确保您的代码可以在启动时收到一些指定正确“主”文件夹的信息,然后将其放入您的 Suave 配置中,如我所示,这应该可以解决问题。
关于linux - 风流与netcoreapp2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49971219/