Ruby on rails Rails教程(M.Hartl)第三版,第8章,如何通过关闭恶意的“Rails控制台”来解锁数据库?
我在中,生成迁移后,我尝试运行:Ruby on rails Rails教程(M.Hartl)第三版,第8章,如何通过关闭恶意的“Rails控制台”来解锁数据库?,ruby-on-rails,ruby,railstutorial.org,Ruby On Rails,Ruby,Railstutorial.org,我在中,生成迁移后,我尝试运行: $ bundle exec rake db:migrate 但给出了以下错误: rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::BusyException: database is locked: #followed by a long list of paths/filenames and line n
$ bundle exec rake db:migrate
但给出了以下错误:
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::BusyException: database is locked:
#followed by a long list of paths/filenames and line numbers...
我知道这可能是因为我退出终端时没有正确退出
rails控制台--sandbox
会话。但是如何在终端控制台类型中查找并关闭此rails控制台
会话?(确保您位于rails应用程序目录中):
然后您应该看到一个流程列表,其中类似于:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
ubuntu 49527 0.0 0.0 482924 620 ? Sl Jan29 0:00 rails_console --sandbox
记下PID
,在本例中为49527
,然后在命令行中运行以下命令:
$ kill 49527
现在运行迁移
$bundle exec rake db:migrate
应该可以工作。在终端控制台类型中(确保您位于Rails应用程序目录中):
然后您应该看到一个流程列表,其中类似于:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
ubuntu 49527 0.0 0.0 482924 620 ? Sl Jan29 0:00 rails_console --sandbox
记下PID
,在本例中为49527
,然后在命令行中运行以下命令:
$ kill 49527
现在运行迁移
$bundle exec rake db:migrate
应该可以了。试着从终端运行$ps aux | grep rails
应该返回如下内容:
username 68924 0.0 1.5 3166032 62168 ?? S 8:49PM 0:00.16 rails_console
username 68900 0.0 0.1 2472884 3420 s003 S+ 8:48PM 0:00.62 /Users/username/.rbenv/versions/2.2.2/bin/ruby bin/rails c
username 68708 0.0 0.2 2535772 6396 s000 S+ 8:20PM 0:03.16 /Users/username/.rbenv/versions/2.2.2/bin/ruby bin/rails s
由于在这种情况下必须终止进程,因此请尝试使用命令强制终止进程
$kill-9pid
尝试从终端运行$ps aux | grep rails
应该返回如下内容:
username 68924 0.0 1.5 3166032 62168 ?? S 8:49PM 0:00.16 rails_console
username 68900 0.0 0.1 2472884 3420 s003 S+ 8:48PM 0:00.62 /Users/username/.rbenv/versions/2.2.2/bin/ruby bin/rails c
username 68708 0.0 0.2 2535772 6396 s000 S+ 8:20PM 0:03.16 /Users/username/.rbenv/versions/2.2.2/bin/ruby bin/rails s
由于在这种情况下必须终止进程,因此请尝试使用命令强制终止进程
$kill-9pid
实际上ps aux | grep rails
是您应该执行的。另外,top
是检查正在运行的进程的另一个好命令。如果我错了,请纠正我,运行ps aux
将返回所有正在运行的进程的列表。它不会给您提供来自rails
的过程。此外,您不必在Rails应用程序目录中才能运行它。实际上,ps aux | grep Rails
是您应该执行的。另外,top
是检查运行进程的另一个好命令。如果我错了,请纠正我,运行ps aux
将返回所有运行进程的列表。它不会给您提供来自rails
的过程。此外,您不必在Rails应用程序目录中才能运行它。您可能希望接受一个作为此问题的答案。您可能希望接受一个作为此问题的答案。