问题描述
环境:Windows 10 19041上的Rails 6
如at least one other question中所述,当您的开发数据库为SQLite时,尝试调用rake db:drop
或rake db:reset
会导致Windows上的权限被拒绝错误:
C:\tools\ruby27\bin\ruby.exe C:\Users\Karu\Dropbox\Projects\grc-rails\bin\rails db:reset
Permission denied @ apply2files - C:/Users/Karu/Dropbox/Projects/grc-rails/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/Users/Karu/Dropbox/Projects/grc-rails/db/development.sqlite3
C:/Users/Karu/Dropbox/Projects/grc-rails/bin/rails:4:in `require'
C:/Users/Karu/Dropbox/Projects/grc-rails/bin/rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)
这不是实际的文件权限问题,因为我登录的用户具有文件的完整权限,因此我可以手动删除它。相反,rake任务似乎需要初始化Rails应用程序,这会导致开发数据库在该过程中被打开以供读取。您可以在非Windows系统上删除打开的文件。
我要在此处完成的是使db:reset
正常运行。也就是说,它应该通过一次操作删除数据库,运行迁移并加载种子数据。
我对以下任何解决方法都不感兴趣:
- 更改操作系统(主机或VM)
- 将此操作分为三个独立的操作(删除文件,db:migrate,db:seed-rails初始化时间很长,每添加一次手动操作都意味着重复此初始化时间)
理想情况下,有一种方法可以覆盖db:reset(或更具体地说,是db:drop)任务,以便仅在Rails应用初始化之前执行裸文件删除。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)