Google AppEngine 3アプ目
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2010/02/25(木) 09:32:03ID:5mUqVSikhttp://code.google.com/appengine/
■過去スレ
Google App Engine
http://pc11.2ch.net/test/read.cgi/php/1207754942/
Google App Engine 2アプ目
http://pc11.2ch.net/test/read.cgi/php/1243654802/
■リンク集
はてなブックマーク
http://b.hatena.ne.jp/t/gae
http://b.hatena.ne.jp/t/Google%20App%20Engine
Delicious
http://delicious.com/popular/gae
http://delicious.com/popular/googleappengine
■参考サイト
App Engine ギャラリー
http://appgallery.appspot.com/
ドキュメント
http://code.google.com/appengine/docs/python/overview.html
0837nobodyさん
2011/02/13(日) 21:12:14ID:???0839nobodyさん
2011/02/14(月) 18:51:26ID:???開発用と本番用で挙動が変わったり
インデックスが壊れたり色々困るだろうに
0841nobodyさん
2011/02/15(火) 19:26:29ID:???0842nobodyさん
2011/02/19(土) 22:13:51.81ID:???gqlのほうがデータベースと逝ってるわりにデータベースっぽい扱いさせてくれないほうが不親切。
0843nobodyさん
2011/02/20(日) 09:11:47.23ID:mUqklcdg0844nobodyさん
2011/02/24(木) 14:56:50.70ID:???{% for e in list %}
<option value={{ e }}>{{ e }}</option>
{% endfor %}
</select>
こんなことやりたいのですが、db.StringPropertyのchoices=set()で設定されている
規定値のリストを取得する方法を教えてください。
0845nobodyさん
2011/02/24(木) 15:32:58.04ID:???0847nobodyさん
2011/02/24(木) 16:28:32.97ID:???>>> a = set([1, 2, 3])
>>> for i in a:
print i
1
2
3
>>>
ソートしたいならsortedで
0848nobodyさん
2011/02/24(木) 16:37:38.93ID:???ありがとうございました。
0849nobodyさん
2011/02/26(土) 16:56:50.23ID:???Djangoを使ってフォームをつくろうとしているのですが、
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 515, in __call__
handler.get(*groups)
File "C:\Users\wish\project\room\main.py", line 44, in get
html = template.render(fpath,params)
(中略)
File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\loader.py", line 72, in find_template_source
raise TemplateDoesNotExist, name
TemplateDoesNotExist: layout.html
このようなエラーになってしまい、動きません。
app.yamlは
handlers:
- url: /css
static_dir: css
- url: .*
script: main.py
と設定してあります。
また、app.yamlとmain.pyのディレクトリの下にそれぞれ
viwesとcssというフォルダを置き、cssにcssファイルを、
viewsにhtmlをおいています。
0851nobodyさん
2011/02/26(土) 17:29:20.46ID:???layout.htmlはviwesフォルダに入っています。
試しにcssフォルダや、app.yamlと同じディレクトリに置いてみても変わりませんでした。
0852nobodyさん
2011/02/26(土) 17:45:35.61ID:???0853nobodyさん
2011/02/26(土) 17:45:57.73ID:???0854nobodyさん
2011/02/26(土) 17:47:02.95ID:???File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3245, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
中略
File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\newforms\util.py", line 15, in smart_unicode
s = unicode(s, settings.DEFAULT_CHARSET)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: invalid start byte
Python2.5です。windows7
GAEを使ってローカルサーバでテストしているのですが、このエラーでつまづいてしまいました。
Djangoを使って入力フォームの作成をしています。
0856nobodyさん
2011/02/28(月) 01:11:08.16ID:VazHfe0jdef get(self):
if ua == keitai:
~ケータイ用のページへジャンプ~
という処理をすべてのクラスに記述するしかないのでしょうか?
0857nobodyさん
2011/02/28(月) 01:13:57.28ID:???まあPythonのデコレータ使えば綺麗に書けるはず
0858nobodyさん
2011/02/28(月) 05:02:15.92ID:???0859nobodyさん
2011/02/28(月) 14:24:19.45ID:???複数のフォームに入力されたデータをある一定のアルゴリズムで変換し
(たとえば、1と入力したら50,4と入力したら200など)
それを表示したいのですが、この場合どうすればいいんでしょうか?
現在は、AddHandlerで
def post(self):
form = AddForm(data=self.request.POST)
if form.is_valid():
data = form.save()
data.put()
self.redirect("/")
else:
self.layout["content"] = self.view_dir + "add.html"
params = {"layout":self.layout,"form":form}
fpath = os.path.join(os.path.dirname(__file__),"layouts",self.layout_file)
html = template.render(fpath,paramas)
self.response.out.write(html)
このように、入力された値は保存してそのままindexで表示されるようになっています。
0860nobodyさん
2011/03/01(火) 22:30:04.73ID:???http://d.hatena.ne.jp/sugyan/20090705/1246803690
ではgenerate_keyを設定してますが bulkloader.yaml
で設定する方法がわかりません。
localで実行のみ。
Modelクラスだけで定義はしているけど、まだdatastore上に実体のデータがない。
とりあえずbulkloaderを走らせてみましたが、データは記録できるものの不定期にスレッドエラーがでて全行送れない。→インデックス設定が必要?
この問題はさておき、何度もテストしていると重複したデータが増える。
key_nameをフィールドを連結した文字列で設定してアップロードしたい。
テストはこのサイトを忠実に再現している・・・つもり。
http://endoyuta.blogspot.com/2011/02/gaebulk-loadercsv.html
というわけです。よろしくお願いします。
0861nobodyさん
2011/03/02(水) 01:01:09.41ID:???--num_threads=
でスレッド数を制限したらいけました。
あとはkey nameで保存させることです。よろしくお願いします。
0862nobodyさん
2011/03/02(水) 04:09:43.92ID:???---------------
property_map:
- property: __key__
external_name: key
export_transform: transform.key_id_or_name_as_string
ならcsvのcolumn_name=keyのフィールドがkey_nameになる
0864nobodyさん
2011/03/04(金) 12:03:30.61ID:???ありがとうございました。
調べた結果キーを複数の要素から生成するにはこうすればできるようです。
- property: __key__
import_template: "%(first_name)s %(last_name)s"
http://efreedom.com/Question/1-3920171/Set-Key-New-Bulkloader
first_nameとlast_nameの定義の前でも使えるのか疑問ですがちょっとやってみます。
0866nobodyさん
2011/03/05(土) 17:06:25.19ID:???やっぱりエラーが出ます。
Error parsing yaml file:
Invalid object:
Neither external_name nor import_template nor export specifiled for propaty __key__
こんな風に名前の定義も入れてみたんですが、ダメです。
- kind: Station
connector: csv
connector_options:
encoding: euc-jp
skip_import_header_row : True
column_list: [rr_cd, line_cd, station_cd,
line_sort, station_sort, station_g_cd, r_type,
rr_name, line_name, station_name,pref_cd,
lon, lat,f_flag]
property_map:
- property: __key__
- import_template: "%(line_name)s%(station_name)s"
ここを参考にしてます。
http://endoyuta.blogspot.com/2011/02/gaebulk-loadercsv.html
csvを改造してKEYを先に作ったほうがラクかなあ。
お知恵をおかし下さい。
0867nobodyさん
2011/03/05(土) 18:39:45.84ID:???こんどは郵便番号データを郵便番号をキーに登録しようとしてやはり同じエラーが出ました。
- kind: ziplist
connector: csv
connector_options:
encoding: utf-8
column_list: [cityno, oldzip, zipcode, pref, citykana, city, townkana,
town, two_code, banchi, chome, two_town]
property_map:
- property: __key__
external_name: zipcode
export_transform: transform.key_id_or_name_as_string
http://www.post.japanpost.jp/zipcode/download.html
0868nobodyさん
2011/03/06(日) 10:33:02.95ID:???columns: from_headerを明記する
- import_template: "%(line_name)s%(station_name)s"
マイナス記号がいつの間にかくっついてた
コピペでいろいろ試しているうちに余計に現象が複雑化してました。
無事、二つのカラムからKeyを生成できました。
>>867
これからやってみます。
まずはご報告まで。
0869nobodyさん
2011/03/06(日) 14:56:49.77ID:???export_transform: transform.key_id_or_name_as_string
これ削除したらkey_nameでのインポートはできるようになりました。
エクスポートの時に困りますね。
0870nobodyさん
2011/03/07(月) 08:14:19.48ID:???それについてどこかに詳しく説明してるページないでしょうか?
0871nobodyさん
2011/03/07(月) 08:38:48.62ID:???App Engine 1.4.1 をリリースしました - High Replication Datastore の紹介 - Google Japan Developer Relations Blog
http://googledevjp.blogspot.com/2011/01/app-engine-141-high-replication.html
0872nobodyさん
2011/03/07(月) 12:12:07.14ID:???0873nobodyさん
2011/03/07(月) 17:07:19.40ID:???マスターデータは一回アップロードすればそれ以上必要ないんですが、緊急メンテナンスが発生したとき
out of quota出たら泣けますね。
ダッシュボードは使えるみたいだから、管理者ページだけでも動くようにしておいて欲しいなあ・・・
0874nobodyさん
2011/03/07(月) 17:14:26.86ID:???0875nobodyさん
2011/03/08(火) 14:47:38.27ID:???0876nobodyさん
2011/03/08(火) 15:53:16.21ID:???ありがとうございます!これのことです!。昔作ったアプリは変更できないんですね。。
それにしてもいつの間にか日本語ブログ出来てたのかぁ。
0877nobodyさん
2011/03/08(火) 16:14:27.16ID:???datas = db.GqlQuery("SELECT * FROM Data offset -1")
と書いてみましたが、-1では指定できませんでした。
0878nobodyさん
2011/03/08(火) 16:25:35.89ID:???使わなくてもアプリ組めるよ
0879nobodyさん
2011/03/08(火) 16:33:24.19ID:???タイムスタンプ記録してORDER BY timestamp DESC LIMIT 1
別のテーブルでIDを管理してIDで検索
ID検索がたぶん高速
0881nobodyさん
2011/03/08(火) 16:51:11.36ID:???複数エンティティからKey_name作って登録する方法だと、たぶんbulkloaderのCPU使用時間は
おまかせkeyで登録するより5倍かかる(当然登録件数によるけど10万件単位)ようです。
10万行処理するのに無料Quotaの10%使ったって参考にしたブログにあったけど
今日は10万行で50%使いました。100万単位だともっとかかるようになるでしょね。
データのメンテナンスするときは更新・削除がラクだろうけど、これは果たしてどうだったのか・・・
チラ裏でした。
さて、そろそろQuotaリセットされる時間です。作業にもどります。
0884nobodyさん
2011/03/08(火) 19:31:02.60ID:???テーブルって言葉が混乱を招いたようですが
別にモデルを作ってそのエンティティに保存しておくだけです。
key_nameを決めてその名前でひとつだけエンティティを保存しておけば
key_nameから簡単にエンティティにアクセスできます。
0886nobodyさん
2011/03/08(火) 19:49:47.01ID:???なるほど
現在、Model Aで定義したものをフォームから受け取り、
そのフォームから受け取ったデータを
data = form.save()
data.put()
で保存しているのですが、
具体的にこれを別のモデルを作りそのエンティティに保存しておく、というのは
どうすればいいんでしょうか?
0887nobodyさん
2011/03/08(火) 21:13:48.19ID:???ID = db.IntegerProperty()
があるとして、Aのdataを保存したあと
key_name = "thisisAslastupdate"
b=B.get_or_insert(key_name)
b.ID=data.key()id() #dataのIDを保存
b.put()
Aのdataを呼び出すとき
key_name = "thisisAslastupdate" #常に同じkey_nameをつかう
b=B.get_or_insert(key_name)
data = A.get_by_id(b.ID)
もちろんトランザクションで処理した方がいいです。
適当にみつけた参考ページ
http://kan.txt-nifty.com/softdev/google_apps_engine/index.html
0888nobodyさん
2011/03/08(火) 21:21:17.71ID:???0889nobodyさん
2011/03/08(火) 21:26:11.17ID:???0890nobodyさん
2011/03/08(火) 21:49:33.48ID:???key_name = "thisisAslastupdate"
b=B.get_or_insert(key_name)
b.ID=data.key()id() #dataのIDを保存
b.put()
これはどこに記述すればいいんでしょうか?
Class Aでdata.put()をした直後でしょうか?
0891nobodyさん
2011/03/08(火) 22:00:23.08ID:???こっちではimportエラーが出てます
<type 'exceptions.ImportError'>: cannot import name template
0892nobodyさん
2011/03/08(火) 22:10:44.23ID:???b.ID=data.key()id()
ここは、
b.ID=data.key().id()でよろしいでしょうか?
スペースをなくし、.をいれています。
0893nobodyさん
2011/03/08(火) 22:11:48.96ID:???そうです。でもコピペしただけでは動かない可能性もありますよ。
ここから先はリファレンスを読んで全体の理解を深めることをおすすめします。
0895nobodyさん
2011/03/08(火) 22:18:32.88ID:???0896nobodyさん
2011/03/08(火) 22:24:25.86ID:???いえ、本当に助かりました。ありがとうございます。
一度動くとリファレンス読んでも急に理解しやすくなったような気がします。
しっかり読んで、またオライリーのGAEも買ってみようと思います。
うまく動いたのですが、
<__main__.TotalData object at 0x078046F0>
と、unicodeがそのまま表示されてしまった?のですが
これはどうすればそのまま表示できるのでしょうか?
0897nobodyさん
2011/03/08(火) 22:27:39.15ID:???0898nobodyさん
2011/03/08(火) 22:32:13.18ID:???日本時間 3/8 9:00PM 現在 Python Runtime で障害が発生しています。
現象としてはあるはずのモジュールに関して ImportError が発生しています。
現在復旧作業中です。アップデートがあればこのスレッドでお知らせします。
松尾さんご苦労様です。早く直してね。
0900nobodyさん
2011/03/09(水) 07:49:38.80ID:???http://groups.google.com/group/google-app-engine-japan/browse_thread/thread/c8f2fe71e927e5d4
0901nobodyさん
2011/03/09(水) 07:52:28.78ID:???0902nobodyさん
2011/03/09(水) 12:16:09.67ID:???0903nobodyさん
2011/03/09(水) 14:38:10.63ID:???Javaの方ができることは多そうですがPythonの方が新しい言語なのでまとまっていて取っ付きやすいのではないかと踏んでいます。
目標は認証付きでテキスト、画像、バイナリのアップロード、ダウンロード。
特定の呼び出し(?)に対して任意のXMLを返すといったところまでです。
アドバイスよろしくお願いします。
書籍は「新人プログラマのための」を買おうと思っていますが他にもおすすめがあればお願いします。
0904nobodyさん
2011/03/09(水) 15:05:18.92ID:???0905nobodyさん
2011/03/09(水) 18:30:54.01ID:???0906nobodyさん
2011/03/09(水) 20:26:35.45ID:???0907nobodyさん
2011/03/09(水) 23:25:55.44ID:7V71uazChttp://www.youtube.com/watch?v=3xnKX8xksNg
0908nobodyさん
2011/03/10(木) 04:06:53.38ID:79yNqmJlえっ!やっぱり ずっと悩んでたのに。。。
0909nobodyさん
2011/03/10(木) 04:09:24.32ID:???みんな会社単位とかで使ってるのか?
0910nobodyさん
2011/03/10(木) 09:48:36.24ID:???みんな会社単位とかで使ってるのか?
0911nobodyさん
2011/03/10(木) 10:41:49.18ID:???0912nobodyさん
2011/03/10(木) 11:09:50.86ID:???0913nobodyさん
2011/03/10(木) 11:11:07.28ID:???わからないことはそのつどググって英語サイトとかまで見てます。
0914nobodyさん
2011/03/10(木) 15:55:06.40ID:/uspR3SGNoMethodError (undefined method `getString' for #<Str1:0x9e40d2>)
のエラーがでるんですが、Str1クラスのnewはできるみたいなんですが
メソッドgetStringを呼べません。ソースは
// Str1.java
package com.aaa;
class Str1 {
protected String str;
public Str1(String str) {
this.str = str;
}
public String getString() {
return str;
}
}
#aaa_controller.rbの一部
require 'java'
import 'com.aaa.Str1'
class AaaController < ApplicationController
def aaa
sss = Str1.new("asasas")
p sss.getString
render :text => ""
end
end
0915nobodyさん
2011/03/10(木) 15:59:35.51ID:???http://hibari.2ch.net/test/read.cgi/php/1267094290/
0916nobodyさん
2011/03/10(木) 23:41:14.23ID:???何気にlogging.debug()使っていい適正回数とかあるんでしょうか?
10回以上使うと重くなるよ的なことってあるんでしょうか?
0917nobodyさん
2011/03/11(金) 08:22:28.47ID:???http://uproda.2ch-library.com/351286Yrr/lib351286.png
ってなんで赤文字で出てるんでしょう?どんな意味があるんでしょうか?
0918nobodyさん
2011/03/11(金) 11:01:15.80ID:???0919nobodyさん
2011/03/11(金) 19:49:49.46ID:???課金覚悟くらいの感じだと思う。
現実的にCPUコスト食うのはしゃーない
0920nobodyさん
2011/03/12(土) 00:13:49.97ID:???The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.
このエラーから進めなくなってるんですが
対処法ありませんか?
0923nobodyさん
2011/03/15(火) 13:04:24.11ID:???0927nobodyさん
2011/03/15(火) 18:21:38.24ID:???ログは自己解決しました。
しかし問題は>>887で指摘されたところにありました。
ローカルでは動くのですが、アップするとエラーになってしまいます。代替案を考えなければならないんでしょうか
0928nobodyさん
2011/03/15(火) 20:19:30.05ID:???0930nobodyさん
2011/03/16(水) 02:02:36.09ID:???0931nobodyさん
2011/03/17(木) 18:49:25.34ID:???BadArgumentError: Expected an instance or iterable of (<type 'int'>, <type 'long'>); received None (a NoneType).
というエラーでつまづいてしまいます。
>key_name = "thisisAslastupdate" #常に同じkey_nameをつかう
>b=B.get_or_insert(key_name)
>data = A.get_by_id(b.ID)
おそらくここでエラーが出ているようです
0933nobodyさん
2011/03/19(土) 15:41:03.41ID:???dataA = db.StringProperty()
dataB = db.StringProperty()
というモデルがあって
key_name = dataA + dataB
とルールを内包させたい場合
put()
をオーバーライドしようとして詰まってます。
get_or_inserを外から呼び出せばいいことですが
中で処理するのは無理でしょうか?
よい方法はありませんか?
0934nobodyさん
2011/03/19(土) 16:24:56.79ID:???class MYdata(db.Model):
dataA = db.StringProperty(required=True)
dataB = db.StringProperty(required=True)
@classmethod
def my_get_or_insert(cls, _a, _b):
return cls.get_or_insert(key_name=_a + _b, dataA=_a, dataB=_b)
0936nobodyさん
2011/03/22(火) 22:43:07.31ID:???他のサイトのHTMLの<img src="xxx">的な使い方です。
レス数が900を超えています。1000を超えると表示できなくなるよ。