【问题标题】:Rails db:migrate:reset producing Errno::EACCES Permission denied @unlink_internalRails db:migrate:reset 产生 Errno::EACCES 权限被拒绝 @unlink_internal
【发布时间】:2017-01-17 19:12:37
【问题描述】:

我正在关注 Michael Hartl 的 Rails 教程,在某些时候我们要运行
rails db:migrate:reset
但是,每次我尝试这样做时,我都会遇到有关文件的权限被拒绝错误

development.sqlite3

我尝试过遇到的以下解决方案:
1. close all programs suspected of using said file and retry task
2. terminate rails console, server, editor and retry task
3. shut/restart pc and executing the task upon restart
4. executing rails db:drop

所有这些都未能允许命令运行。唯一可行的解​​决方案是手动删除文件并运行rails db:migrate

我在跑步

Rails 5.0.0.1
红宝石 2.2.5p319
Sqlite3 3.14.1
Windows 10 专业版

我的堆栈跟踪是:

** 调用 db:migrate:reset (first_time)
** 调用 db:drop (first_time)
** 调用 db:load_config (first_time)
** 执行 db:load_config
** 调用 db:check_protected_environments (first_time)
** 调用环境 (first_time)
** 执行环境
** 调用 db:load_config
** 执行 db:check_protected_environments
** 执行 db:drop
** 调用 db:drop:_unsafe (first_time)
** 调用 db:load_config
** 执行 db:drop:_unsafe
权限被拒绝 @ unlink_internal - %path%/sample_app/db/development.sqlite3 无法删除数据库“db/development.sqlite3”
导轨中止!
Errno::EACCES: 权限被拒绝 @ unlink_internal - %path%/sample_app/db/development.sqlite3
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:1450:in unlink'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:1450:in
block in remove_file'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:1458:in platform_support'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:1449:in
remove_file'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:793:in remove_file'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:571:in
block in rm'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:570:in each'
C:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb:570:in
rm'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/sqlite_database_tasks.rb:22:in drop'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:136:in
drop'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:152:in block in drop_current'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:292:in
block in each_current_configuration'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:291:in each'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:291:in
each_current_configuration'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/tasks/database_tasks.rb:151:in drop_current'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:42:in
block (2 级) in '
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in call'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in
block in execute'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in each'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in
execute'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:187:in block in invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/2.2.0/monitor.rb:211:in
mon_synchronize'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:180:in invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:173:in
invoke'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-5.0.0.1/lib/active_record/railties/databases.rake:38:in block (2 levels) in <top (required)>'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in
call'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in block in execute'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in
each'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in execute'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:187:in
block in invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/2.2.0/monitor.rb:211:in mon_synchronize'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:180:in
invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:209:in block in invoke_prerequisites'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:207:in
each'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:207:in invoke_prerequisites'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:186:in
block in invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/2.2.0/monitor.rb:211:in mon_synchronize'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:180:in
invoke_with_call_chain'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:173:in invoke'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:152:in
invoke_task'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in block (2 levels) in top_level'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in
each'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in block in top_level'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:117:in
run_with_threads'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:102:in top_level'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-5.0.0.1/lib/rails/commands/rake_proxy.rb:13:in
block in run_rake_task'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:178:in standard_exception_handling'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-5.0.0.1/lib/rails/commands/rake_proxy.rb:10:in
run_rake_task'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-5.0.0.1/lib/rails/commands/commands_tasks.rb:51:in run_command!'
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-5.0.0.1/lib/rails/commands.rb:18:in
'
bin/rails:4:in require'
bin/rails:4:in
'
任务:TOP => db:drop:_unsafe

如何消除此错误并在以后的项目中防止它发生?

【问题讨论】:

  • 只是不要使用 Windows 进行开发!
  • Stack Overflow 上有很多类似的问题,比如this 一个。记得先搜索。老实说,Aleksey 听起来轻率,但他是对的。安装 Vagrant 或类似的东西并运行 linux 的虚拟实例并在其中开发而不是 Windows。

标签: ruby-on-rails ruby sqlite rubygems railstutorial.org


【解决方案1】:

按照本书中关于 Windows 10、Ruby 2.6.0、Rails 5.2.2 的步骤,我遇到了同样的问题。我也在该数据库中使用 DB Browser for SQLite。

在我关闭浏览器、rails 服务器和其他仍在使用数据库的所有设备后,我仍然收到错误消息,即使在重新启动后也是如此。

为了解决这个问题,我不得不通过 Windows 手动删除 development.sqlite3 文件,然后执行 rails db:migrate

【讨论】:

    【解决方案2】:

    我在使用 Windows 10 专业版时遇到同样的错误 |红宝石 2.4.1 |导轨 5.1.4。我喜欢使用:

    rake db:drop:_unsafe
    rake db:create
    rake db:migrate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 2011-08-30
      • 2016-01-19
      • 2015-12-06
      • 1970-01-01
      • 2015-07-20
      • 2016-03-14
      • 2014-01-24
      相关资源
      最近更新 更多