【问题标题】:Google App Engine and Upload scriptGoogle App Engine 和上传脚本
【发布时间】:2014-04-16 22:35:14
【问题描述】:

我目前正在使用 Android 开发包附带的 Eclipse,并遵循 GAE 教程:

https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorial

我从未有过任何服务器或后端经验,我希望使用 App Engine 的功能制作一个 Android 应用程序。

按照教程,一切似乎都很顺利,直到我到达您需要“创建上传脚本”的部分。我不知道我应该如何继续阅读,我越读越困惑。

教程说“创建一个目录并使其成为当前目录”然后创建一个脚本文件,但我想创建新目录并将其放在包资源管理器中的 Eclipse 的 AppEngine 项目中还是其他地方?我真的不知道所有这些是如何协同工作的。

我刚刚为 Eclipse 安装了 python 2.7,并确保 PyDev 解释器指向 python.exe,但除此之外,我真的不知道从那时起该去哪里。

EDIT1:我正在使用 Cygwin 并运行“sh upload_data.shPlace”。当我运行它时,我收到以下错误:

C:\Python27\python.exe: can't open file '/cygdrive/c/Program Files (x86)/Google/google_appengine/appcfg.py': [Errno 2] No such file or directory

我尝试将“C:\Program Files (x86)\Google\google_appengine\appcfg.py”添加到 upload.sh 文件中。它看起来像下面这样:

C:\Program Files (x86)\Google\google_appengine\appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e myemail@mail.com

出现以下错误:

upload_data.sh: line 2: syntax error near unexpected token `('
upload_data.sh: line 2: `/cygdrive/c/Program Files (x86)/Google/google_appengine\appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e mymail@mail.com'

EDIT2:好的,我在 '(' 之前添加了 '\' 并使用了 '\' 作为空格。以下是 upload.sh 中的代码。

C:\Program\Files\(x86\)\Google\google_appengine\appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e mymail@mail.com

然后出现以下错误就出现了如下错误:

upload_data.sh: line 2: C:ProgramFiles(x86)Googlegoogle_appengineappcfg.py: command not found

我去了谷歌应用引擎目录,appcfg.py 在那里。此外,我不太确定我是否真的使用了正确的命令。我用过:

sh upload.data.sh(箭头括号)places.csv(箭头括号)放置

脚本或任何东西是否需要放在某个目录中?我已经尝试将 appcfg.py 文件放在我的脚本目录中,在其中保存 upload_data.sh 文件只是说 [Errno 2] 没有这样的文件或目录。然后我尝试将文件、upload.data、places.csv 和 bulkloader.yaml 放入存储 appcfg.py 的 Google/google_appengine 目录中,然后它将返回“Permission Denied”错误。我还将 python27 重新安装到“google_appengine”文件中。我尝试在 Cygwin 上运行“appcfg.py”并返回 [Err2] No such file or directory。

然后我尝试在 Windows 命令提示符下运行运行:

appcfg.py upload_data --config_file
C:\Users\User\Documents\AndroidApps\Scripts\bulkloader.yaml--url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e mymail@mail.com

返回以下错误:

11:09 PM Uploading data records.
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\appcfg.py", line 126, in
<module>
    run_file(__file__, globals())
  File "C:\Program Files (x86)\Google\google_appengine\appcfg.py", line 122, in
run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 4934, in <module>
    main(sys.argv)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 4925, in main
    result = AppCfgApp(argv).Run()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 2648, in Run
    self.action(self)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 4605, in __call__
    return method()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 4417, in PerformUpload
    run_fn(args)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\ap
pcfg.py", line 4298, in RunBulkloader
    sys.exit(bulkloader.Run(arg_dict))
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\bu
lkloader.py", line 4406, in Run
    SetupLogging(arg_dict)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\bu
lkloader.py", line 4362, in SetupLogging
    file_handler = logging.FileHandler(log_file, 'w')
  File "C:\Program Files (x86)\Google\google_appengine\lib\logging\__init__.py",
 line 889, in __init__
    StreamHandler.__init__(self, self._open())
  File "C:\Program Files (x86)\Google\google_appengine\lib\logging\__init__.py",
 line 908, in _open
    stream = open(self.baseFilename, self.mode)
IOError: [Errno 13] Permission denied: 'C:\\Program Files (x86)\\Google\\google_
appengine\\bulkloader-log-20140314.230944'

似乎我根本无法在 Cygwin 中使用 appcfg.py。我已经卡了将近 2 天了。

谢谢。

【问题讨论】:

    标签: android python google-app-engine python-2.7 backend


    【解决方案1】:

    链接的教程没有这么说,但“创建上传脚本”部分似乎仅限于将数据从 .csv 文件上传到开发服务器。我的解释是,该目录可以在任何地方,并且与教程中的其他项目无关。

    当教程说“创建一个新目录并使其成为当前目录”时,这意味着在文本控制台中打开一个命令 shell。本教程假设您使用的是 Unix 类型系统,而不是 Windows。假设该目录将被称为 mobile-assistant-upload 并且您使用 vi 作为文本编辑器,那么您的 shell 命令将是:

    mkdir mobile-assistant-data
    cd mobile-assistant-data
    vi upload_data.sh
    

    请注意,从 appcfg.py 到电子邮件地址的所有文本都必须在一行中,并且您应该使用自己的电子邮件地址。

    编辑:我认为upload_data.sh 的第2 行应该看起来更像:

    /cygdrive/c/Program\ Files\ \(x86\)/Google/google_appengine\appcfg.py --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e mymail@mail.com
    

    以及运行它的命令行:

    sh upload.data.sh places.csv Place
    

    没有箭头括号,它们只是文档。当然这假设places.csv 在当前目录中。

    【讨论】:

    • 我在“我的文档”的目录中创建了脚本,并安装了 Cygwin 以运行 upload_data.sh 文件。我现在遇到的问题是,当我尝试运行它时出现错误
    • appcfg.py 是一个 AppEngine SDK 脚本,其目录必须在您的搜索路径中。我警告你将 --config-file 和你自己的电子邮件地址与 appcfg.py 放在同一行。
    • 感谢我已经将 --config-file 和我的电子邮件地址放在了同一行。您如何将 App Engine SDK 放在搜索路径中?我尝试将“C:\Program Files (x86)\Google\google_appengine”添加到环境变量中,并尝试将它添加到 python 路径,但我不知道我所做的是否正确,因为它仍然显示 python。 exe无法打开文件错误。
    • 现在你遇到了 Cygwin 问题。 Using Cygwin 本机路径注释或该文档的其余部分可能会有所帮助。如果您知道我的意思,您也可以尝试不更改搜索路径,而是编辑 upload_data.sh 中的 appcfg.py 名称以使其完整路径出现在命令行中。可能它可能是“C:\Program Files (x86)\Google\google_appengine\appcfg.py”,尽管我无法从您的计算机外部验证..
    • 你越来越近了!现在 shell 不明白 ( 和 ) 字符仅仅是目录名称中的文字。您可以通过转义它们来解决这个问题,例如将 \ 字符放在它们前面。这同样适用于该目录名称中的空格 - 接下来尝试在空格前加上 \ 字符。谁决定在文件和目录名称中允许使用空格和其他元字符(然后将其内置到操作系统中),都应该因浪费大量时间而受到严厉惩罚。
    【解决方案2】:

    我终于通过在管理员模式下运行 Windows 命令提示符来完成这项工作。然后我导航到 google_appengine 目录。然后我在 Windows cmd 中使用了以下命令:

    appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename places.csv --kind=Place -e mymail@mail.com
    

    在运行命令之前,我还将 bulkloader.yaml 和 places.csv 文件放在了 google_appengine 目录中。它会要求输入密码,只需按 Enter,然后文件应该上传到 localhost。

    【讨论】:

      【解决方案3】:

      遇到了同样的问题。
      本教程在这一点上写得不是很好。 我在 Ubuntu 系统上做了以下操作

      • 下载 google_appengine for Python https://developers.google.com/appengine/downloads
      • 解压文件夹
      • 将 places.csv 和 bulkloader.yaml 从 MobileAssistant-Data 复制到文件夹中
      • 在该文件夹中创建文件upload_data.sh 文件
      • 写入以下两行并保存文件

        #!/bin/sh 
        ./appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8888/remote_api --filename $1 --kind=$2 -e nobody@nowhere.com
        
      • 使文件可执行chmod a+x upload_data.sh

      如果一切不顺利,运行:

      <google_appengine folder>./upload_data.sh places.csv Place
      

      应该输出类似:

      12:55 PM Uploading data records.
      [INFO    ] Logging to bulkloader-log-20140918.125544
      [INFO    ] Throttling transfers:
      [INFO    ] Bandwidth: 250000 bytes/second
      [INFO    ] HTTP connections: 8/second
      [INFO    ] Entities inserted/fetched/modified: 20/second
      [INFO    ] Batch Size: 10
      Password for nobody@nowhere.com: 
      [INFO    ] Opening database: bulkloader-progress-20140918.125544.sql3
      [INFO    ] Connecting to localhost:8888/remote_api
      [INFO    ] Starting import; maximum 10 entities per post
      .
      [INFO    ] 2 entities total, 0 previously transferred
      [INFO    ] 2 entities (1696 bytes) transferred in 58.8 seconds
      [INFO    ] All entities successfully transferred
      

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多