質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5355閲覧

Djangoで初期のmigrateが出来ない。(`disk I/O error`)

hnkyi

総合スコア14

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2グッド

0クリップ

投稿2018/05/18 03:00

編集2018/05/18 06:25

事象

タイトルの通りです。
Djangoで新規プロジェクトを作成し、初期のmigrateをすると、`disk I/O error)が発生します。

元々ローカルで開発を行っており、あらかた動いたのでクラウド環境に移そうと考えていました。

移す前に、クラウド環境でdjangoプロジェクトが作れて実行確認できるか試したところ、今回の事象が発生しました。

環境

当該事象が発生するクラウド環境は以下の通りです。

sh

1$ cat /etc/redhat-release 2CentOS Linux release 7.5.1804 (Core) 3 4$ python -V 5Python 3.6.5 6 7$ pip list | grep Django 8Django (2.0.5) 9 10$ sqlite3 -version 113.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668

手順

大きく2つの手順を試しました。

  • いきなりmigrateをする
  • makemigtationsをしてから、migrateをする

前述した通り、どちらの手順でもdisk I/O errorという不穏なエラーが発生します...

①いきなりmigrate

sh

1# djangoプロジェクトを新規作成 2$ django-admin startproject dummy 3 4# 移動 5$ cd dummy 6 7# マイグレーション 8$ python manage.py migrate 9Operations to perform: 10 Apply all migrations: admin, auth, contenttypes, sessions 11Running migrations: 12Traceback (most recent call last): 13 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 14 return self.connection.commit() 15sqlite3.OperationalError: disk I/O error 16 17The above exception was the direct cause of the following exception: 18 19Traceback (most recent call last): 20 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 55, in ensure_schema 21 editor.create_model(self.Migration) 22 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/sqlite3/schema.py", line 28, in __exit__ 23 super().__exit__(exc_type, exc_value, traceback) 24 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 108, in __exit__ 25 self.atomic.__exit__(exc_type, exc_value, traceback) 26 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/transaction.py", line 212, in __exit__ 27 connection.commit() 28 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 261, in commit 29 self._commit() 30 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 31 return self.connection.commit() 32 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__ 33 raise dj_exc_value.with_traceback(traceback) from exc_value 34 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 35 return self.connection.commit() 36django.db.utils.OperationalError: disk I/O error 37 38During handling of the above exception, another exception occurred: 39 40Traceback (most recent call last): 41 File "manage.py", line 15, in <module> 42 execute_from_command_line(sys.argv) 43 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line 44 utility.execute() 45 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute 46 self.fetch_command(subcommand).run_from_argv(self.argv) 47 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv 48 self.execute(*args, **cmd_options) 49 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute 50 output = self.handle(*args, **options) 51 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 200, in handle 52 fake_initial=fake_initial, 53 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/executor.py", line 91, in migrate 54 self.recorder.ensure_schema() 55 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 57, in ensure_schema 56 raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc) 57django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (disk I/O error)

②makemigrationsしてから、migrate

sh

1# djangoプロジェクトを新規作成 2$ django-admin startproject dummy 3 4# 移動 5$ cd dummy 6 7# マイグレーション 8$ python manage.py makemigrations 9No changes detected 10$ 11$ python manage.py migrate 12Operations to perform: 13 Apply all migrations: admin, auth, contenttypes, sessions 14Running migrations: 15 Applying contenttypes.0001_initial...Traceback (most recent call last): 16 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 17 return self.connection.commit() 18sqlite3.OperationalError: disk I/O error 19 20The above exception was the direct cause of the following exception: 21 22Traceback (most recent call last): 23 File "manage.py", line 15, in <module> 24 execute_from_command_line(sys.argv) 25 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line 26 utility.execute() 27 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute 28 self.fetch_command(subcommand).run_from_argv(self.argv) 29 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv 30 self.execute(*args, **cmd_options) 31 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute 32 output = self.handle(*args, **options) 33 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 200, in handle 34 fake_initial=fake_initial, 35 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/executor.py", line 117, in migrate 36 state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) 37 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards 38 state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 39 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration 40 state = migration.apply(state, schema_editor) 41 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/sqlite3/schema.py", line 28, in __exit__ 42 super().__exit__(exc_type, exc_value, traceback) 43 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 108, in __exit__ 44 self.atomic.__exit__(exc_type, exc_value, traceback) 45 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/transaction.py", line 212, in __exit__ 46 connection.commit() 47 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 261, in commit 48 self._commit() 49 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 50 return self.connection.commit() 51 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__ 52 raise dj_exc_value.with_traceback(traceback) from exc_value 53 File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit 54 return self.connection.commit() 55django.db.utils.OperationalError: disk I/O error

試した事

SQLiteのバージョンアップ

ローカルで動いていたバージョン(3.19.3)や、最新版(3.23.1)に変更してみましたが、同様の事象となりました。

SQLiteへの接続

普通に繋がりました。

テーブルは、①の時はdjango_migrationsだけ、②の時はdjango_content_typedjango_migrationsだけあるような状況。

以下、接続状況。

sh

1$ sqlite3 db.sqlite3 2SQLite version 3.7.17 2013-05-20 00:56:22 3Enter ".help" for instructions 4Enter SQL statements terminated with a ";" 5sqlite> 6sqlite> .tables 7django_content_type django_migrations

SQLiteへのCreate table/Insert/Select

@hayataka2049 様からの質問を受け、試しましたところ、手動でのCreate table/Insert/Selectは正常に処理できました。

sh

1$ sqlite3 db.sqlite3 2SQLite version 3.7.17 2013-05-20 00:56:22 3Enter ".help" for instructions 4Enter SQL statements terminated with a ";" 5sqlite> 6sqlite> create table dummy (id, name); 7sqlite> .tables 8django_migrations django_session dummy 9sqlite> 10sqlite> insert into dummy (id, name) values (1, 'hoge'); 11sqlite> 12sqlite> select * from dummy; 131|hoge

その他諸々、一日かけて調べて分からなかったため、tetatailにて質問させていただく事にしました。
よろしくお願い致します。


Teratailの文字数制限のせいで、書きたい情報が書けなかったので、Qiitaにも同じの書きました。
こちらも参考にしていただけると幸いです。
https://qiita.com/hnkyi/items/5f00d9eb5d7a91ef0b59

Nero1129, hayataka2049👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/05/18 03:29

sqlite3に手動でcreate tableやinsertしてもなりますか?
hnkyi

2018/05/18 04:20

回答ありがとうございます。 試しましたところ、`create table`, `insert`, `select`は正常に処理できました。
hayataka2049

2018/05/18 07:20 編集

わかりませんね・・・他のプロセスとかにsqliteのファイル(db本体やジャーナルファイルなど)が捕まっちゃう可能性はありますか?
hnkyi

2018/05/18 07:34

他のプロセスは動かしてないので、それはないと思われます...
hnkyi

2018/05/18 08:15

SQLiteのオートコミットってどうやって外すかご存知でしょうか...??
guest

回答1

0

自己解決

自己解決しました。

SELinuxがdisabledになっていない場合に、当該事象が発生する事があるようです。

https://stackoverflow.com/questions/29244788/error-disk-i-o-error-on-a-newly-created-database

getenforceで確認してdisabledだったので安心してたのですが、
再起動しないと反映されない事を忘れてました。
(いつdisabledになっていて、再起動してなかったのかは定かではないのですが...)

投稿2018/05/18 08:54

hnkyi

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問