Rails 7部署在Ubuntu服务器读取磁盘文件报错求助
问题原因及解决办法
1. Dokku容器化的文件系统隔离
Dokku基于Docker部署,你的Rails应用运行在独立的Docker容器中,容器内部的文件系统和Ubuntu宿主机完全隔离。宿主机上的/home/text-files/txt/my-file.txt在容器内不存在,因此Rails会报文件找不到的错误。而本地开发环境没有容器隔离,所以能正常读取。
解决办法:
- 将宿主机目录挂载到Dokku容器内部:
- 执行挂载命令,把宿主机目录映射到容器内的指定路径:
dokku storage:mount my-rails-app /home/text-files/txt:/app/mounted-txt - 修改Rails视图代码,读取容器内的路径:
<%= File.read("/app/mounted-txt/my-file.txt") %> - 重启应用使配置生效:
dokku ps:restart my-rails-app
- 执行挂载命令,把宿主机目录映射到容器内的指定路径:
2. 文件权限不足
你在终端用自身用户执行cat能读取文件,但容器内Rails进程的运行用户(通常是dokku或rails)可能没有该文件的读取权限,或者没有上级目录的访问权限。
解决办法:
- 调整宿主机文件及目录的权限,允许其他用户读取和访问:
chmod o+r /home/text-files/txt/my-file.txt chmod o+x /home/text-files /home/text-files/txt
3. 路径大小写或拼写错误
Linux系统区分文件名大小写,而OSX默认不区分。如果Rails代码中的路径和宿主机实际路径存在大小写差异,也会触发找不到文件的错误,需仔细核对路径拼写。
内容的提问来源于stack exchange,提问作者user984621
相关产品推荐
相关产品推荐

