我想问一下,使用Google App Engine BulkLoader类导入数据需要使用哪种凭据
appcfg.py upload_data --config_file=models.py --filename=listcountries.csv --kind=CMSCountry --url=http://localhost:8178/remote_api vit/
然后它要求我提供凭据:
请输入登录凭据 本地主机
以下是对models.py内容的提取,我使用此listcountries.csv文件
class CMSCountry(db.Model):
sortorder = db.StringProperty()
name = db.StringProperty(required=True)
formalname = db.StringProperty()
type = db.StringProperty()
subtype = db.StringProperty()
sovereignt = db.StringProperty()
capital = db.StringProperty()
currencycode = db.StringProperty()
currencyname = db.StringProperty()
telephonecode = db.StringProperty()
lettercode = db.StringProperty()
lettercode2 = db.StringProperty()
number = db.StringProperty()
countrycode = db.StringProperty()
class CMSCountryLoader(bulkloader.Loader):
def __init__(self):
bulkloader.Loader.__init__(self, 'CMSCountry',
[('sortorder', str),
('name', str),
('formalname', str),
('type', str),
('subtype', str),
('sovereignt', str),
('capital', str),
('currencycode', str),
('currencyname', str),
('telephonecode', str),
('lettercode', str),
('lettercode2', str),
('number', str),
('countrycode', str)
])
loaders = [CMSCountryLoader]
每次尝试输入电子邮件和密码都会导致“身份验证失败”,因此我无法将数据导入开发服务器。
我认为我的文件和我的模型没有任何问题,因为我已成功将数据上传到appspot.com应用程序。
那么我应该为localhost凭证添加什么呢?
我也尝试使用 Eclipse与Pydev ,但我仍然得到相同的消息:(
这是输出:
Uploading data records.
[INFO ] Logging to bulkloader-log-20090820.121659
[INFO ] Opening database: bulkloader-progress-20090820.121659.sql3
[INFO ] [Thread-1] WorkerThread: started
[INFO ] [Thread-2] WorkerThread: started
[INFO ] [Thread-3] WorkerThread: started
[INFO ] [Thread-4] WorkerThread: started
[INFO ] [Thread-5] WorkerThread: started
[INFO ] [Thread-6] WorkerThread: started
[INFO ] [Thread-7] WorkerThread: started
[INFO ] [Thread-8] WorkerThread: started
[INFO ] [Thread-9] WorkerThread: started
[INFO ] [Thread-10] WorkerThread: started
Password for foobar@nowhere.com: [DEBUG ] Configuring remote_api. url_path = /remote_api, servername = localhost:8178
[DEBUG ] Bulkloader using app_id: abc
[INFO ] Connecting to /remote_api
[ERROR ] Exception during authentication
Traceback (most recent call last):
File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 2802, in Run
request_manager.Authenticate()
File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 1126, in Authenticate
remote_api_stub.MaybeInvokeAuthentication()
File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\ext\remote_api\remote_api_stub.py", line 488, in MaybeInvokeAuthentication
datastore_stub._server.Send(datastore_stub._path, payload=None)
File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\appengine_rpc.py", line 344, in Send
f = self.opener.open(req)
File "C:\Python25\lib\urllib2.py", line 381, in open
response = self._open(req, data)
File "C:\Python25\lib\urllib2.py", line 399, in _open
'_open', req)
File "C:\Python25\lib\urllib2.py", line 360, in _call_chain
result = func(*args)
File "C:\Python25\lib\urllib2.py", line 1107, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "C:\Python25\lib\urllib2.py", line 1082, in do_open
raise URLError(err)
URLError: <urlopen error (10061, 'Connection refused')>
[INFO ] Authentication Failed
谢谢!
答案 0 :(得分:6)
EUREKA:我找到了使用bulkloader.py
工具的方法,而无需手动输入登录凭据。
以下是两个步骤:
设置app.yaml
文件。例如:
- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin
您应该在- url: .*
之前的app.yaml
行之前放置它,否则您永远不会访问/remote_api
网址。
请注意,我已离开login: admin
部分,因为删除它是一种非常糟糕的做法,因为您可能会将其部署到生产中...
2启动此命令(根据您的需要调整)。
echo 'XX' | python2.5 ../google_appengine/bulkloader.py --dump --kind=NAMEOFMODEL --url=http://localhost:8080/remote_api --filename=FILENAME --app_id=APPID --email=foobar@nowhere.com --passin .
诀窍是使用这两个参数的组合:
--email=
(您可以输入您想要的任何电子邮件地址,我使用foobar@nowhere.com
)--passin
指定--email=
会取消“输入凭据”提示,--passin
将允许从stdin
(echo 'XX' |
发挥作用的位置)读取密码!
享受!
P.S。:不要忘记投票,这样Google就可以提供一种更易于使用的方式:Issue 2440。
答案 1 :(得分:4)
我建议您按照here给出的建议,并引用:
将此添加到app.yaml文件:
-- url: /loadusers script: myloader.py login: admin
请注意,如果您在本地运行 开发机,评论关闭 最后一行登录:admin让你 不需要凭证来运行 bulkloader 强>
(我的重点)。
答案 2 :(得分:3)
编辑:看看我的新解决方案
此问题仍然存在。我打开a ticket询问是否可以在本地开发服务器上绕过身份验证。请投票支持这个问题,以便我们能够[快速]解决。
我已经能够通过以下方式将数据上传到开发服务器:
离开“login:admin”行是一件好事,因为如果没有这一行,你就不会在生产服务器上上传你的应用程序,这可能会让你有人向数据库添加数据......
块引用
答案 3 :(得分:2)
是的,请注释掉remote_api的管理员要求:
[app.yaml中]
- url: /remote_api script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py # login: admin
然后运行此命令:
$ bulkloader.py --dump --kind=DbMyKind --url=http://localhost:8080/remote_api --filename=export.csv --app_id=my_appid --auth_domain=localhost:8080
注意:验证是否传递了--auth_domain,并为localhost传递了正确的端口。
答案 4 :(得分:2)
使用aaa@gmail.com
作为用户名。
使用a
作为密码。
有效。神奇。
答案 5 :(得分:1)
您需要先在本地开发服务器中创建管理员凭据。
使用firefox(或chrome safari等),打开http://localhost:8178/remote_api,系统会要求您登录(无密码),输入电子邮件作为登录信息,然后勾选login as administrater
框,登录。这将为您创建本地管理员凭据,在本地批量加载时使用此凭据。
它适用于其他管理员所需的本地访问。
离开(或评论)login:admin
是一种不好的做法,因为您也可以将其部署到生产中。小心!
答案 6 :(得分:1)
我使用此命令将数据从本地服务器传输到远程服务器。文件的扩展名(json)很重要。框架:django-nonrel,os:Win7。
manage.py dumpdata >dump.json
manage.py remote loaddata dump.json
答案 7 :(得分:0)
接下来为我工作:
删除该行
login:admin
更新应用cofig:
appcfg.py update [app-id]
(重新)启动本地服务器:
appserver [app-id]
上传数据:
appcfg.py upload_data --config_file=album_loader.py --filename album_data.csv --kind Album --url=http://localhost:8080/remote_api ../[app-id]
要求输入邮件和密码
答案 8 :(得分:0)
另一个解决方案是使用lambda:http://www.carlosble.com/?p=603
来删除auth函数