You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL环境运行Rails的rails db:migrate出现SQLite只读错误如何解决

WSL下Rails执行db:migrate报SQLite只读错误解决方案

核心原因

你遇到的SQLite3::ReadOnlyException报错核心诱因有两个:

  1. 你将Rails项目存放在了Windows系统核心目录/mnt/c/Windows/system32下,该目录默认有严格的读写权限限制
  2. WSL默认挂载Windows NTFS分区时没有启用Linux权限元数据,导致文件权限逻辑和Linux系统不兼容,单独修改单个log文件的只读属性无法解决全局的权限限制

解决方案(按推荐优先级排序)

方案1:将Rails项目迁移到WSL原生文件系统(最推荐)

该方案不仅能彻底解决权限问题,还能大幅提升Rails在WSL下的运行速度,跨NTFS挂载分区运行Rails会有明显的性能损耗。
操作步骤:

  • 在WSL用户目录下新建专属的项目存放路径:
    mkdir -p ~/projects/
  • 将整个项目文件夹从Windows系统目录移动到WSL原生路径:
    mv /mnt/c/Windows/system32/railsfriends ~/projects/
  • 进入项目根目录:
    cd ~/projects/railsfriends/friends
  • 重新执行迁移命令即可:
    rails db:migrate

方案2:修改WSL挂载NTFS分区的权限配置(适合必须把项目放在Windows分区的场景)

如果确实需要保留项目在Windows分区,可修改WSL的自动挂载配置,兼容Linux权限逻辑:

  • 执行命令编辑WSL配置文件:
    sudo nano /etc/wsl.conf
  • 在文件中写入以下配置:
    [automount]
    enabled = true
    options = "metadata,umask=22,fmask=11"
    mountFsTab = false
    
  • 保存退出后,在Windows端CMD执行命令重启WSL:
    wsl --shutdown
  • 重新打开WSL进入项目目录,递归设置项目文件夹权限:
    sudo chmod -R 755 /mnt/c/Windows/system32/railsfriends/friends
  • 再次执行rails db:migrate即可
    注意:不建议长期把开发项目放在system32目录下,建议移动到普通Windows用户目录如/mnt/c/Users/你的用户名/Projects/下,避免系统权限限制

方案3:临时修改数据库文件权限(仅适合临时验证用)

如果只是临时测试验证问题,可单独给SQLite数据库文件设置可写权限:

  • 进入项目的db目录:
    cd /mnt/c/Windows/system32/railsfriends/friends/db
  • 给数据库文件设置全局可写权限:
    sudo chmod 666 development.sqlite3
  • 回到项目根目录重新执行迁移命令即可

内容的提问来源于stack exchange,提问作者Niki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:03