本地启动Rails应用遇权限错误:Permission denied @ dir_s_mkdir - /db
问题排查与解决方案
1. 检查数据库配置路径
首先确认config/database.yml中sqlite3的数据库路径是否为相对路径。错误提示创建/db目录失败,大概率是配置里写了绝对路径(开头带斜杠),导致Rails尝试在系统根目录创建文件夹,而普通用户没有这个权限。
打开配置文件查看:
cat config/database.yml
正常的development环境配置应该类似:
development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000
如果路径是/db/development.sqlite3,删除开头的斜杠,改为相对路径db/development.sqlite3即可。
2. 迁移项目到WSL2原生文件系统
WSL2对Windows挂载目录(如/mnt/c/)的权限处理逻辑和WSL1不同,容易出现权限异常。如果你的项目放在Windows磁盘下,建议移到WSL2的原生目录(比如~/projects/):
mkdir -p ~/projects cp -r /mnt/c/你的Rails项目路径 ~/projects/ cd ~/projects/你的Rails项目路径 bundle install rails server
3. 修复项目目录权限
确保当前用户拥有项目目录的完整所有权:
sudo chown -R $USER:$USER ~/projects/你的Rails项目路径 chmod -R 755 ~/projects/你的Rails项目路径
4. 重新安装sqlite3依赖(针对新建项目也报错的情况)
如果新建Rails项目同样出现该错误,可能是sqlite3 gem的编译路径异常,尝试重新安装并指定系统sqlite3库路径:
gem uninstall sqlite3 gem install sqlite3 -- --with-sqlite3-dir=/usr/lib/x86_64-linux-gnu/ bundle install
5. 验证WSL2基础权限
执行简单的目录创建操作,确认WSL2的文件系统权限正常:
mkdir test-dir && touch test-dir/file.txt && rm -rf test-dir
如果这个操作失败,说明WSL2的用户权限配置有问题,可以尝试重置WSL2用户默认设置,或检查Windows用户目录下的.wslconfig文件是否有异常配置。
内容的提问来源于stack exchange,提问作者Aertyaga
相关产品推荐
相关产品推荐

