我一直在关注这个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/"很好,但它看起来很难看。知道怎么做才能更好吗?基本上,我不想被强迫硬编码绝对路径任何地方。
发布于 2018-04-23 02:39:19
我认为答案可以在https://suave.io/files.html中找到,它建议按照以下方式创建一个配置:
let config =
{ defaultConfig with homeFolder = Some (Path.GetFullPath "./public") }Path.GetFullPath返回的路径将取决于应用程序启动时看到的当前工作目录(这又取决于您如何启动应用程序:从命令行、从systemd单元文件等)。这里有太多可能的变量,我无法给出确切的指示,但是如果您的启动方法可以在启动Suave服务器之前将cd放入适当的文件夹中,那么这将解决您的问题。
如果您在正确设置当前工作目录时遇到困难,那么只需在config中硬编码完整路径:
let config =
{ defaultConfig with homeFolder = Some "/home/<your_username>/<path_to_your_project>/bin/Debug/netcoreapp2.0/" }但这有点难看,而且并不是真正的可移植性(一旦部署应用程序,就必须再次修改路径)。因此,我推荐这样一种方法,即确保开始脚本在正确的位置执行cd,然后使用具有相对路径的Path.GetFullPath。或者,您可以在应用程序启动时读取一个配置文件,在其中指定主路径,或者将其作为环境变量传入.各种各样的可能性。只需确保您的代码可以在启动时传递一些信息,指定正确的"home“文件夹,然后如我所示将其放入Suave配置中,这将解决这个问题。
https://stackoverflow.com/questions/49971219
复制相似问题