所以我试图在本地运行带有App
的Google Datastore
引擎进行测试和调试。本地App
引擎似乎独立工作,datastore
模拟器也是如此。
但是一旦我为datastore
模拟器设置环境变量,并重新启动本地App Engine,它就会因错误而崩溃,
Caused by: java.lang.IllegalStateException: Must use project ID as app ID if project ID is provided.
我在下面附上了一个更完整的堆栈跟踪
从错误消息中,我怀疑我需要将项目ID更改为项目名称。所以我尝试用我可能的项目名称替换项目id的各种实例,不幸的是,这也没有用。
我正在运行的命令:
1. gcloud config set project PROJECT-ID
2. export ENDPOINTS_SERVICE_NAME=name.endpoints.PROJECT-ID.cloud.goog
3. gcloud beta emulators datastore start
4. $(gcloud beta emulators datastore env-init)
5. mvn appengine:run
我把堆栈跟踪放在pastebin https://pastebin.com/atcnYwrq上
我偶然发现了解决这个问题的方法。
export DATASTORE_USE_PROJECT_ID_AS_APP_ID=true
如果其他人遇到此错误,我没有修复原始错误,但如果您使用Remote API,它似乎在RemoteCheck为false时设置本地数据存储。
如果您正在使用Objectify,那么您将需要使用Remotely,设置CustomFactory并注册它,并确保您的web.xml中包含以下内容
<filter-mapping>
<filter-name>ObjectifyFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<listener>
<listener-class>com.packagename.OfyHelper</listener-class>
</listener>