Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby rake db:migrate正在引发BusyException:数据库被锁定异常_Ruby_Ruby On Rails 3_Sqlite - Fatal编程技术网

Ruby rake db:migrate正在引发BusyException:数据库被锁定异常

Ruby rake db:migrate正在引发BusyException:数据库被锁定异常,ruby,ruby-on-rails-3,sqlite,Ruby,Ruby On Rails 3,Sqlite,我正在学习MichaelHartl的RubyonRails教程,在第6章中,我被指示创建一个新的迁移,向users表中的email列添加索引 以下是我的迁移: def self.up add_index :users, :email, :unique => true end def self.down remove_index :users, :email end 当我运行rakedb:migrate时,它会思考一秒钟,然后抛出一个BusyException并说数据库已锁定。该

我正在学习MichaelHartl的RubyonRails教程,在第6章中,我被指示创建一个新的迁移,向users表中的email列添加索引

以下是我的迁移:

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

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


非常感谢您的任何帮助

我一直都明白这一点,这是因为sqlite一次只能由一个进程访问,并且数据库被该进程锁定。确保没有服务器或控制台在另一个终端上运行。如果您继续这样做,并且您确信没有其他东西可以访问该sqlite数据库(包括僵尸进程),那么您可以遵循以下建议:


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

/p>同意克里斯托弗的观点

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

$: ps -a | grep ruby
$: kill -s 9 XXXX
我怀疑来自终端的ruby进程是罪魁祸首为我做的。它总是由一个控制台或服务器引起的,它挂起的方式让我杀死它,然后必须找到“僵尸”进程来解锁数据库


在windows上,肯定比杀死可疑进程树更难。

我也有同样的问题。对我来说,打开SQLite数据库浏览器时,打开的数据库与锁定它的数据库相同。

我的
BusyException
问题的解决方案是,回想起来,“很明显”,我没有对
SQLite3
数据库的写入权限。我让git将一个rails项目克隆到一个由windows服务的文件系统中,我正在从Ubuntu盒访问该文件系统。无论出于何种原因,
Sqlite3
数据库是使用+x权限创建的,
Sqlite3
必须将其解释为繁忙

在确认版本、gems、rubies等的大量工作之后,我才注意到文件权限为+x


诚然,这是一系列神秘的情况,但我与这个问题斗争了两周,没有从谷歌搜索中找到任何帮助,我以为我会将解决方案添加到知识库中。

对我来说,什么都不起作用。我删除了所有*.sqlite3文件,然后运行

rake db:create
rake db:migrate
然后它成功了


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

也有同样的问题,但解决方案与上面的略有不同

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

该迁移尝试在
users.email
列上添加索引,但您正在谈论添加一个新列。困惑?你是对的,我正在尝试向users表中的email列添加索引,而不是新列。谢谢你指出这一点。太好了。这正是发生的事情。我检查了一下是否有服务器在运行,想不出还有其他进程可以访问它,但我刚刚关闭了终端,一切正常。非常感谢你,克里斯托弗。