Google App Engine 和上传脚本
我现在在用Eclipse,这是跟Android开发工具包一起提供的,我正在按照GAE的教程进行学习:
我之前没有任何服务器或后端的经验,希望能用App Engine的功能来制作一个Android应用。
按照教程的步骤进行得很顺利,直到我看到需要“创建一个上传脚本”的部分。我越读越糊涂,不知道该怎么继续。
教程说要“创建一个目录并将其设为当前目录”,然后再创建一个脚本文件,但我不确定这个新目录是要放在Eclipse的AppEngine项目中的包浏览器里,还是放在其他地方?我对这些东西是怎么结合在一起的完全不清楚。
我刚在Eclipse上安装了Python 2.7,并确保PyDev解释器指向python.exe,但除此之外,我不知道接下来该怎么做。
编辑1:我在使用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
我尝试在upload.sh文件中添加“C:\Program Files (x86)\Google\google_appengine\appcfg.py”。它看起来像这样:
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'
编辑2:好的,我在“(”前面加了“\”,并且对空格也用了“\”。现在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
我去到google app engine目录,发现appcfg.py在那儿。此外,我不太确定我是否在使用正确的命令。我用了:
sh upload.data.sh (箭头括号)places.csv(箭头括号)Place
脚本或其他东西需要放在特定的目录吗?我尝试把appcfg.py文件放到我存放upload_data.sh文件的脚本目录里,但系统提示[Errno 2]没有这样的文件或目录。然后我又把upload.data、places.csv和bulkloader.yaml文件放到Google/google_appengine目录下,那里有appcfg.py,但返回了“权限被拒绝”的错误。我还重新安装了python27到“google_appengine”文件夹里。我尝试在Cygwin上直接运行“appcfg.py”,结果返回[Err2]没有这样的文件或目录。
然后我尝试在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。我已经卡了快两天了。
谢谢。
3 个回答
我也遇到了同样的问题。
这个教程在这一部分写得不是很好。
我在Ubuntu系统上做了以下步骤:
- 下载Python版本的google_appengine,链接在这里:https://developers.google.com/appengine/downloads
- 把下载的文件夹解压到某个地方
- 把MobileAssistant-Data文件夹里的places.csv和bulkloader.yaml复制到刚解压的文件夹里
- 在那个文件夹里创建一个叫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
希望这能帮到你!
我终于通过以管理员模式运行Windows命令提示符来解决这个问题。接着,我进入了google_appengine这个文件夹。然后我在Windows命令行中输入了以下命令:
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文件夹里。运行命令时,它会要求输入密码,你只需要直接按回车键,然后文件就会上传到本地服务器上。
这个教程虽然没有明确说明,但“创建上传脚本”这一部分似乎只限于把数据从一个 .csv 文件上传到开发服务器。我的理解是,目录可以放在任何地方,并且和教程中的其他项目没有关系。
当教程提到“创建一个新目录并将其设为当前目录”时,这意味着你需要在一个文本控制台中打开命令行。教程假设你使用的是类Unix系统,而不是Windows。假设这个目录叫做 mobile-assistant-upload,并且你使用 vi 作为文本编辑器,那么你的命令行指令应该是:
mkdir mobile-assistant-data
cd mobile-assistant-data
vi upload_data.sh
注意,从 appcfg.py 到电子邮件地址的所有文本必须写在一行里,并且你应该使用自己的电子邮件地址。
补充说明:我觉得 upload_data.sh 的第二行应该更像是:
/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 文件在当前目录下。