当我在Ubuntu 20.04上开发一个Rails 6应用程序时,遇到了同样的问题。
每次我运行rails assets:clobber
命令完全删除public/assets
中的旧资源时,都会出现以下错误:
errno::enotempty: directory not empty @ dir_s_rmdir
errno::eacces: permission denied @ apply2files
日志指向导致此错误的文件路径,在我的情况下是public/packs/manifest.json
文件。
我尝试删除它或更改权限,但没有效果。 我还尝试删除项目中的tmp
目录,但也没有用。
以下是我解决问题的方法:
我使用ls -lh
命令列出了该目录中的所有文件和目录,得到了以下输出:
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct 6 20:29 404.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.7K Oct 6 20:29 422.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 1.6K Oct 6 20:29 500.html
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 0 Oct 6 20:29 apple-touch-icon.png
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 0 Oct 6 20:29 apple-touch-icon-precomposed.png
drwxr-xr-x 3 promisechukwuenyem promisechukwuenyem 4.0K Oct 13 09:20 armstrong_tools
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 0 Oct 6 20:29 favicon.ico
drwxr-xr-x 3 root root 4.0K Oct 8 13:06 packs
-rw-rw-r-- 1 promisechukwuenyem promisechukwuenyem 99 Oct 6 20:29 robots.txt
我发现 packs
目录的所有者是 root
,与其他文件和目录的权限不同:
drwxr-xr-x 3 root root 4.0K Oct 8 13:06 packs
我只需运行以下命令,将所有权从root更改为promisechukwuenyem:
sudo chown -R promisechukwuenyem:promisechukwuenyem packs/
现在,当我运行命令rails assets:clobber
完全删除旧的资产在public/assets
时,它可以正常工作。
就是这样。
希望这能帮到你。
uglifier
切换到terser
进行 JS 压缩时,出现了这个问题。我不得不在 Staging/Production 中运行rails assets:clobber
,然后重新部署,一切都正常了。 - Joshua Pinter