「teratail」にも質問投げたんですが、文字数制限のせいで、追加情報が載せれなかったので、こっちにも書いておきます。
そもそも何で文字数制限あるんや...
Djangoで初期のmigrateが出来ない。(disk I/O error
)
追記: 2018/05/18 14:55
原因っぽいもの見つけました。(まだ対処法までは見つかってませんが...)
「②makemigrationsしてから、migrate」でエラーとなっている以下の行から、contenttypes
のSQLが怪しいと見ました。
Running migrations:
Applying contenttypes.0001_initial...Traceback (most recent call last):
File "/root/.virtualenvs/env1/lib/python3.6/site-packages/django/db/backends/base/base.py", line 239, in _commit
return self.connection.commit()
sqlite3.OperationalError: disk I/O error
そこで、python manage.py sqlmigarte
にて、実行される各SQLを表示してみました。
$ python manage.py sqlmigrate contenttypes 0001
BEGIN;
--
-- Create model ContentType
--
CREATE TABLE "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL);
--
-- Alter unique_together for contenttype (1 constraint(s))
--
CREATE UNIQUE INDEX django_content_type_app_label_model_76bd3d3b_uniq ON "django_content_type" ("app_label", "model");
COMMIT;
以下のオペレーションを行ったところ、COMMIT;
にてdisk I/O error
が発生しました。
# db.sqlite3を削除
$ rm db.sqlite3
# makemigrations
$ python manage.py makemigrations
No changes detected
# SQLite3に接続し、「contenttypes.0001_initial」で実行されるはずのSQLを手動で実行
$ sqlite3 db.sqlite3
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> --- tables内に何も無いことを確認
sqlite> .tables
sqlite> --- contenttypes.0001_initialで実行されるはずのSQLを手動で実行
sqlite> BEGIN;
sqlite> CREATE TABLE "django_content_type" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "name" varchar(100) NOT NULL, "app_label" varchar(100) NOT NULL, "model" varchar(100) NOT NULL);
sqlite> CREATE UNIQUE INDEX django_content_type_app_label_model_76bd3d3b_uniq ON "django_content_type" ("app_label", "model");
sqlite> COMMIT;
Error: disk I/O error
ちなみに、BEGINとCOMMITを付けなかったらエラーなく実行できます。
何でSQLite3
でcommitするだけで、disk I/O error
になるんでしょう...
追記:SQLiteのBegin~Commit/Rollback
sqlite> -- テーブル作ってみる
sqlite> begin;
sqlite> create table dummy (id, name);
sqlite> commit;
Error: disk I/O error
sqlite> -- disk IO error発生した....
sqlite>
sqlite> -- しかも何故か、生成は成功してる...
sqlite> .tables
dummy
sqlite> -- ロールバックはうまくいく
sqlite> begin;
sqlite> drop table dummy;
sqlite> rollback;
sqlite> .tables
dummy
sqlite> -- コミットは例のごとくerrorになるのに、処理自体は成功する....
sqlite> begin;
sqlite> drop table dummy;
sqlite> commit;
Error: disk I/O error
sqlite> .tables
sqlite>
何なんだ、お前は.....
追記:解決!!!
SELinuxが影響してました。
disabled
じゃないとダメみたいです。
getenforce
で確認したらdisabled
だったから安心しきってたけど、
再起動してなかったのかな...分からんち。
(SELinuxは再起動しないと反映されないので注意しよう!!!)