【问题标题】:rake db:migrate is throwing BusyException: database is locked exceptionrake db:migrate is throwing BusyException: database is locked 异常
【发布时间】:2011-07-24 02:03:04
【问题描述】:

我正在阅读 Michael Hartl 的 Ruby on Rails 教程,在第 6 章中,我被指示创建一个新迁移以向用户表中的电子邮件列添加索引。

这是我的迁移:

def self.up
  add_index :users, :email, :unique => true
end

def self.down
  remove_index :users, :email
end

当我运行 rake db:migrate 时,它​​会思考一秒钟,然后抛出 BusyException 并说数据库已锁定。该数据库是存储在我的用户文件夹中的本地计算机上的 sqlite3 数据库;没什么特别的。

非常感谢任何和所有帮助。

【问题讨论】:

  • 迁移正在尝试在 users.email 列上添加索引,但您正在谈论添加新列。困惑?
  • 你说得对,我正在尝试向用户表中的电子邮件列添加索引,而不是新列。感谢您指出这一点。

标签: ruby ruby-on-rails-3 sqlite


【解决方案1】:

我一直都明白这一点,这是因为 sqlite 一次只能由一个进程访问,并且数据库被该进程锁定。确保您没有在另一个终端中运行任何服务器或控制台。如果你继续得到这个,并且你确定没有其他东西访问那个 sqlite 数据库(包括僵尸进程),你可以按照这里的建议:

How do I unlock a SQLite database?

【讨论】:

  • 完美。这正是发生的事情。我检查了是否有任何服务器正在运行,并且想不出任何其他进程会访问它,但我只是杀死了终端,一切正常。非常感谢克里斯托弗。
【解决方案2】:

几乎同样的事情发生在我身上。 简单的解决方案是从我的 rails 控制台退出。它正在锁定 SQLite。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。对我来说,我打开了 SQLite 数据库浏览器,并使用锁定它的同一个数据库。

    【讨论】:

      【解决方案4】:

      /同意克里斯托弗的观点

      对于我们这些使用基于 unix 的机器的人来说,一个简单的

      $: ps -a | grep ruby
      $: kill -s 9 XXXX
      

      我怀疑来自终端的 ruby​​ 进程是罪魁祸首为我做的。它总是由以某种方式挂起的控制台或服务器引起的,让我杀死它,然后必须找到“僵尸”进程来解锁数据库。

      在 Windows 上,这肯定不会比杀死可疑进程树更难。

      【讨论】:

        【解决方案5】:

        我的BusyException 问题的解决方案,回想起来“很明显”,是我没有对SQLite3 数据库的写访问权限。我有 git clone'd 一个 rails 项目到我从 Ubuntu 机器访问的 Windows 服务的文件系统。无论出于何种原因,Sqlite3 数据库是使用 +x 权限创建的,Sqlite3 必须将其解释为忙。

        只有在确认版本、gem、rubies 等大量工作之后,我才注意到文件权限是 +x。

        当然,这是一组神秘的情况,但我在这个问题上苦苦挣扎了两周,没有从谷歌搜索中找到任何帮助,我想我会在知识库中添加解决方案。

        【讨论】:

          【解决方案6】:

          对我来说,没有任何工作。我删除了所有 *.sqlite3 文件,然后运行

          rake db:create
          rake db:migrate
          

          然后它起作用了。

          PS: sqlite3 文件位于 Rails 项目根目录的 db 文件夹中

          【讨论】:

            【解决方案7】:

            刚遇到同样的问题,但解决方案与上述略有不同。

            $ pgrep -l rails
            XXXX ruby
            $ kill -s 9 XXXX
            

            【讨论】:

              猜你喜欢
              • 2020-12-19
              • 1970-01-01
              • 1970-01-01
              • 2018-03-29
              • 2017-05-17
              • 2019-10-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多