【问题标题】:Google App Engine & Django Sandbox: Shell and Web seem to be using different datastores?Google App Engine 和 Django Sandbox:Shell 和 Web 似乎使用不同的数据存储?
【发布时间】:2010-04-15 19:29:35
【问题描述】:

我是 Django 和 Google App Engine 的新手,并且正在使用 OSX10.6 中的沙盒和 GoogleAppEngineLauncher。我在 OReilly “Programming Google App Engine” 一书中的教程中运行了一个基本的“书店”应用程序。

这是错误:如果我通过 Web 界面将新对象添加到数据存储区,那么它可以通过 Web 界面读取,但如果我通过 shell 查询数据存储区,它似乎不存在。反之亦然:如果我在 shell 中添加一个对象,那么我可以从 shell 中读取它,但它不会出现在 web 界面中。

相关的古董:当我重新启动计算机时,两个数据存储中的所有数据都消失了。

欢迎任何想法或理论。谢谢!

=T=

【问题讨论】:

  • 你在使用任何东西来帮助 django 吗?像 google-app-engine-django、django-nonrel、app-engine-patch 还是别的什么?每个都有指定数据存储文件位置的方法。
  • 我正在使用 google-app-engine-django。不知道那些其他的东西是什么。

标签: django google-app-engine google-cloud-datastore


【解决方案1】:

如果您使用远程 API shell 并将其指向您在计算机上运行的实例,您应该获得相同的数据存储。目前尚不清楚您如何通过“外壳”访问您的应用,但您似乎正在创建第二个实例来这样做。

当您重新启动计算机时,数据会从数据存储中消失,因为默认情况下,数据存储文件是在 /tmp 中创建的;您可以在运行 dev_appserver.py 时为其指定另一个位置(系统不会在重新启动时为您清理的位置)。

【讨论】:

  • 我正在通过在我的应用程序的主目录中运行“python manage.py shell”来访问 shell
  • 你是如何运行服务器的?我相信“python manage.py runserver”应该为您提供与使用 manage.py shell 相同的数据存储,而手动运行 dev_appserver.py 将为您提供不同的数据存储。然而,这也可能取决于您使用的任何帮助程序/补丁。
  • 我一直在通过 GoogleAppEngineLauncher 应用运行服务器。我将尝试从命令行运行它,并确保它和我的 shell 都指向同一个数据存储。
  • 如何创建新的数据存储?当我将 dev_appserver 指向一个空文件或目录时,它会引发错误。
  • 我可以通过将数据存储从 /tmp 复制到另一个目录,然后在运行 appserver 或 shell 时指定新位置来破解此问题。这似乎解决了问题!
【解决方案2】:

没错,python manage.py 将带您进入应用程序的另一个实例(和另一个数据存储),而不是 Launcher。如果您想要应用程序的命令行界面,请参阅How do I activate the Interactive Console on App Engine?,或仅从python manage.py runserver 而不是启动器运行开发服务器并继续使用manage.py shell

我被相同的数据存储删除所困扰。出于某种原因,App Engine 需要小心关闭商店——您必须点击“停止”(如果从 dev_appserver.py 命令运行,通常在 Linux 上运行,则点击 ctrl-c)才能将数据存储正确保存到磁盘。如果在正确关闭之前关闭计算机,数据存储将被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2011-12-24
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多