如何解决使用SQLite数据库进行开发时,如何在Windows中使用rake db:drop引发权限拒绝错误?
环境: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 举报,一经查实,本站将立刻删除。