2024 Clojure发展状况调查中分享您的想法!

欢迎!请参阅关于页面以获取更多关于此功能的信息。

0
工具

DBFS(Databricks文件系统)未正确实现POSIX权限。
特别是bash标志"-w"无法正确检测非可写项目目录。

因此,在我这个案例中,尝试在DBFS上启动clojure会在当前目录中尝试写入.cpcache,由于该目录实际上是只读的,因此无法执行此操作。

有关详细信息,请参见此处错误信息
https://clojurians.slack.com/archives/C03S1KBA2/p1726750856210489

在DBFS上也无法更改UNIX文件权限

我认为引入CLJ_PROJECT_CACHE的原方案将解决我的当前问题。

1 答案

0

听起来像是 DataBricks 的问题吗?

是的,或者我们接受“-w”不是一个可靠的检测“只读”目录的方法,我们找到一种方法,让 Clojure 脚本在不依赖它的情况下工作,且没有“强制”另一个目录的方法。

不确定是否有其他文件系统也存在类似问题。

DBFS 不支持任何“文件权限”,因此它永远不会在 DBFS 中解决。
当前的逻辑也不允许在文件系统“满”时“更改” .cpcache 的位置,例如。(可写但已满)
或者当是其他原因而不是“只读”时,我不喜欢它的默认位置。
类路径通常很长,必须传递给Java进程。您可以通过命令行传递(但许多系统有进程行长度限制),或者您可以将类路径写入文件,并通过这种方式传递。Clojure CLI执行后者,但需要在某处写入文件。可以将文件写入多个位置,并需要逻辑来确定正确的位置。如果系统报告可以写入但无法写入,我也不知道CLI可以对此做什么(这似乎对下载Maven库、下载git库、准备git库以及CLI/tools.deps的其他许多功能有问题)。

尝试写入文件以测试是否可以写入不会成功,因为我们使用文件的存在来检测缓存文件是否存在。添加更多的环境变量是不希望的——已经有很多配置选项,而且在很多情况下,这种逻辑存在于多个位置(bash和tools.deps clojure),这些位置必须同步,并且所有读取/写入缓存的代码都必须达成一致。所有这些选项都是不好的,程度不同。
...