dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[GAE]dev_appserver.pyで--datastore_pathを指定するとエラー

が出ました。

ローカルで開発する時のデータファイルをわかりやすい位置に置いておこうと思って

$ mkdir ~/gae_datastore
$ dev_appserver.py --datastore_path=~/gae_datastore [GAEプロジェクト]

を実行すると、次のようなエラーが。

INFO     2014-09-05 14:41:45,323 sdk_update_checker.py:229] Checking for updates to the SDK.
Traceback (most recent call last):
  File "/usr/local/bin/dev_appserver.py", line 82, in <module>
    _run_file(__file__, globals())
  File "/usr/local/bin/dev_appserver.py", line 78, in _run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 970, in <module>
    main()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 963, in main
    dev_server.start(options)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 768, in start
    request_data, storage_path, options, configuration)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 867, in _create_api_server
    default_gcs_bucket_name=options.default_gcs_bucket_name)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 364, in setup_stubs
    auto_id_policy=datastore_auto_id_policy)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_sqlite_stub.py", line 604, in __init__
    factory=sql_conn)
sqlite3.OperationalError: unable to open database file

sqlite3のエラー...?と思ったんですが、
これは単に、--datastore_pathはディレクトリでなくファイルを指定するからだったみたいです。

gae_datastoreというディレクトリがないとうまくいきます。
ただ、その場合はgae_datastoreというデータファイルが作成されるので注意。

リファレンスを見ると

f:id:dackdive:20140906002303p:plain

the location used for the datastore file

だからファイルなのか...

ちなみにディレクトリを指定したい場合は--storage_pathオプションをつけるといいです。

$ mkdir ~/gae_datastore
$ dev_appserver.py --storage_path=~/gae_datastore [GAEプロジェクト]

データファイル以外のファイルも全部置かれることになりますが。