Google App Engine for Python 4アプ目
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/04/12(火) 17:54:29.62ID:???http://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/
Google AppEngine 3アプ目
http://hibari.2ch.net/test/read.cgi/php/1267057923/
■リンク集
はてなブックマーク
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
0708nobodyさん
2012/03/29(木) 13:07:20.25ID:???This application is temporarily over its serving quota. Please try again later.
0709nobodyさん
2012/03/29(木) 17:25:38.84ID:???0710nobodyさん
2012/04/01(日) 12:08:16.13ID:???>SELECT __key__ FROM Hoge WHERE ...." というクエリで 2500 件ぐらいの key を 取り出したりしていました
これを参考にkeyだけを取り出すコードを書いてましたが1000件以上のデータが取り出せません。
取り出したあとはまるまるmemcacheに放り込んでます。
cacheddata=listcount":listcount,"done":0,"list":list,"sddb":sddb,"chanksize":chanksize,"corp_name":cls.corp_name,"msgkey":msgkey,"tasks":0}
memcache.set(id,cacheddata ,3600)
ひょっとしてガセでしたか?
0711nobodyさん
2012/04/01(日) 12:17:12.15ID:???括弧が消えてました すみません
0712nobodyさん
2012/04/01(日) 12:22:33.37ID:???あと、ソースを出せ
0713nobodyさん
2012/04/01(日) 12:30:38.71ID:???def getdata(sqlstr)
list = db.GqlQuery("SELECT __key__ FROM data " + sqlstr )
return list
def setdata();
list = getdata(" WHERE e1 = 'e1' AND ....... ")
listcount = list.count()
cacheddata={listcount":listcount,"done":0,"list":list,"sddb":sddb,"chanksize":chanksize,"corp_name":cls.corp_name,"msgkey":msgkey,"tasks":0}
memcache.set(id,cacheddata ,3600)
こんな感じです。よろしくおねがいします。
0714nobodyさん
2012/04/01(日) 12:36:23.97ID:???0715nobodyさん
2012/04/01(日) 12:58:30.76ID:???countが取れてないの?データが取れないのかどっちだ?
0716nobodyさん
2012/04/01(日) 13:24:47.44ID:???countは規制なくなったって書いてあったし、keyだけなら1000件以上取れると思ってました。
0717nobodyさん
2012/04/01(日) 13:26:18.83ID:???0718nobodyさん
2012/04/01(日) 13:35:19.61ID:???こちらの環境はPython 2.7+HRD+ndbです
0719nobodyさん
2012/04/01(日) 14:05:43.34ID:???countに引数与えないと1000になるんですね。
なにげにその後その数字を当てにしてgetしてたのでkeyも1000しかないように見えてました。
無事にすべて取り出すことができました。
ありがとうございました。
0720nobodyさん
2012/04/05(木) 09:58:08.40ID:???Google App Engine Blog: Master/Slave Datastore, thanks for all your hard work
http://googleappengine.blogspot.jp/2012/04/masterslave-datastore-thanks-for-all.html
0721nobodyさん
2012/04/05(木) 10:06:07.82ID:???0722nobodyさん
2012/04/06(金) 09:31:08.45ID:???blobストアのデータが自動で移転できないから躊躇してた
ツールはあるらしいけど
半年くらい猶予あるのかな?
0723nobodyさん
2012/04/06(金) 17:13:44.16ID:???0724nobodyさん
2012/04/06(金) 17:24:12.99ID:???調子に乗ってgoogle各種サービスをディスったら、
各方面からボコられて
「google信者様の言うとおりです」と発狂したふりをして幕を閉じるという
なんとも無残な散りざまを見せていたな
0725nobodyさん
2012/04/07(土) 12:59:39.04ID:BeoWQwVe問題点
● テンプレートの多重継承がうまくできない
operation1.html で {% extends "../master.html" %}
master.html で {% extends "../base.html" %}
とすると base.html が見つからなくなります。どうやら孫にあたる operation1.html からの相対パス ../base.html を探しているようです。
・ テンプレート内の記述を変えずに問題を解決する方法があれば教えてください。
・ django は 最初のバージョンのみでよいので、右記ページのような問題はありません。 http://stackoverflow.com/questions/5263623/templatedoesnotexist-on-python-app-engine-django-1-2-while-template-rendering-re
● import の書き方がわからない
大雑把にいって handler の中身が Controller, libs の中身が Model にあたります。
main.py で handlers1.py を、handler1.py で user_auth.py を、それぞれ import したいです。
・ import 文の書き方を教えてください。__init__.py が必要になるのであれば、内容も教えてください。
次のレスが希望するファイル構成の内容です。著しく不適切であれば指摘してください。
0726725
2012/04/07(土) 13:00:07.32ID:???- app.yaml
- main.py
- handlers
- - handler1.py
- - handler2.py
- libs
- - user_auth.py
- - main_datastore.py
- template
- - base.html
- - master
- - - master.html
- - - operation1
- - - - operation1.html
...
0727nobodyさん
2012/04/07(土) 13:06:30.36ID:???0728725
2012/04/07(土) 13:14:25.12ID:???● template.render に渡すパスの取得方法がわからない
多くのサンプルに
self.response.out.write(
template.render(
os.path.join(
os.path.dirname(__file__), 'hoge.html'
), result
)
)
のようなコードがありますが、__file__ は handlers/handler1.py や handlers/handler1/handler1.py を指しており、
hoge.html は template/master/operation/hoge.html などにあります。
このような離れた場所のファイルは、その都度 os.path.join にドットを渡してやることによってしか取得できないのでしょうか。
アプリケーションのメインからの相対パスで指定する方法がありましたら教えてください。
0730nobodyさん
2012/04/07(土) 15:06:12.58ID:???0731nobodyさん
2012/04/07(土) 15:15:43.48ID:???アプリのrootにhoge.pyでも作って
import os
APPLICATION_BASE_DIR = os.path.dirname(__file__)
で使いたいところで
from hoge import APPLICATION_BASE_DIR
os.path.join(APPLICATION_BASE_DIR, 'template/master/operation/hoge.html')
とでもすれば?関数にするとか好きにしてね
0732725
2012/04/07(土) 16:32:47.80ID:???こちらで訊きます: http://kohada.2ch.net/test/read.cgi/php/1323960422/
>>731
ありがとうございます。この部分は解決したと思います (他の部分がまだなのでテストしていません)。
0733nobodyさん
2012/04/15(日) 14:43:22.57ID:???毎時ぴったりに2つのタスクが登録されるせいでインスタンスが増えてしまいます
設定でどうにかできませんでしょうか?
queue.yaml
queue:
- name: default
rate: 1/s
0734nobodyさん
2012/04/15(日) 16:29:35.85ID:???App Engine の cronフォーマットのまとめ - やさしいデスマーチ
ttp://d.hatena.ne.jp/shuji_w6e/20110403/1301840010
0735nobodyさん
2012/04/15(日) 16:31:43.95ID:???詳しくはググれ
0736nobodyさん
2012/04/15(日) 18:50:52.09ID:???0737nobodyさん
2012/04/18(水) 09:16:11.39ID:???デバッグの構成から起動はできましたが、直し方をご存知のかたよかったら教えてください。
プロジェクトをコピーしたり、プロジェクトがバグったとき
パッケージエクスプローラーから一度削除してもう一度空の新規プロジェクトを同一のディレクトリで作成すると
うまく行ってたと思うのですが間違ってますか?
0738nobodyさん
2012/04/18(水) 20:00:22.44ID:hrAUVqet.pydevprojectの中身確認してみると良いです。
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/project</path>
上のソースパス合ってないとか?
新しくGAEプロジェクト作って照らしあわせてみるとわかるかも
0739nobodyさん
2012/04/19(木) 09:12:09.14ID:???0740nobodyさん
2012/04/20(金) 01:09:11.05ID:???Memcache Viewer
Statistics
Hit count: 10724
Miss count: 907
Hit ratio: 92%
Item count: 468 item(s)
Total cache size: 1607620 byte(s)
Oldest item age: 6 min(s) 6 second(s)
0741nobodyさん
2012/04/20(金) 19:32:23.28ID:IHyQVpyCapp.yamlの一部を書き換えれば一応動作してるようですが、
自動的に生成されるコードなどは以前のwebappのものです。
どこかで切り替える必要があるのかなあ?
0742nobodyさん
2012/04/21(土) 04:11:46.80ID:???app.yamlでpython2.7設定するとgoogle.appengine.ext.webappの中でwebapp2使ようになる
threadsafeしないならhello webapp worldのままで対応できてる
0743nobodyさん
2012/04/21(土) 12:16:08.96ID:902Nv7Ux巨大なデータをまるごとメモリにおくとメモリ上限に引っかかるから
少し読みだして処理してセーブしてメモリから破棄、
ということの繰り返しでやろうと思ってるんだけど
不要になったメモリはちゃんと開放されるんだろうか?
0744nobodyさん
2012/04/21(土) 12:30:07.50ID:???0746741
2012/04/22(日) 01:01:25.19ID:???ありがとうございます。そういうことでしたか。
だんだん変更されていくでしょうし、様子見ながら使っていこうと思います。
0747nobodyさん
2012/04/22(日) 17:50:29.80ID:aA4PJf7d解析したり参考にしたりする権利はあるの?
0748nobodyさん
2012/04/23(月) 22:52:28.36ID:???0749nobodyさん
2012/04/23(月) 23:07:58.61ID:???Python 2.7, threadsafe: true, and deferred.defer - Google Groups
https://groups.google.com/forum/?fromgroups#!topic/google-appengine/YxdORLqGEDQ
0750nobodyさん
2012/04/24(火) 04:18:37.99ID:???0751nobodyさん
2012/04/27(金) 14:50:08.02ID:93VuBEM9ユーザーのOpenIDを取得するにはどうしたらいいの?
User#getNickName()?
0752751
2012/04/27(金) 14:53:05.77ID:93VuBEM9たぶんそうみたいだ
開発環境だとOpenIDじゃなくメルアドが入ってるけど
0753nobodyさん
2012/04/28(土) 22:15:01.31ID:deK//TLpdatastoreのkeyにシステムが自動的に採番するIDの代わりにアプリ側で名前を設定できるけど
一意な名前を付けたい場合どうすればいいと思う?
Datastore.allocateId()で作ったキーのIDを取得して名前に付加するとかでいいんだろうか?
0754nobodyさん
2012/04/28(土) 22:39:38.96ID:deK//TLp(そもそも同じ名前のエンティティを作れるのか)
一意にするとクエリで前方一致検索をしなければいけない
同じにするとアップデートをかけたい場合めんどくさそう
0755nobodyさん
2012/04/28(土) 23:17:16.74ID:???インクリメントを管理する別のデータを用意してトランザクション内で1足してる
使い捨てのmemcacheIDはnow()とrand()で作ってる
>>754
エンティティを同じ名前にする意味がわからない
0756nobodyさん
2012/04/28(土) 23:57:32.67ID:deK//TLp勘違いしていたかも。
キーの名前で検索しようと思ってたんだけど、
そういう場合は別途フィールドを用意して検索用文字列を持つべきなのかな。
0757nobodyさん
2012/04/29(日) 19:19:44.05ID:???ほかのクラウドサービスを探すのが良いんでしょうか?
0759nobodyさん
2012/04/30(月) 11:15:23.60ID:???自前のsessionで辞書を管理してるけどExpandoで動的にエンティティを作ってるよ。
javaにはないのかな?
コレクションが使えるみたいだしこれでいけないか?
0760nobodyさん
2012/05/02(水) 00:32:33.27ID:XvVmSkzn実際そこそこのアプリケーション作るとしたときはDjangoなど他のフレームワークで始めた方がいいですか?
例えばセッションとか、リクエストハンドラの前後に共通の処理を加えるとか、
比較的ありふれた内容でも、webappでは意外と手間がかかるかなと感じたんですが・・・。
逆に使い込めばシンプルな分、自由度高い気もしたり。
フレームワークの話はあまり出てないようですが、
やはり外部のフレームワーク選んでますか?
0761nobodyさん
2012/05/02(水) 18:53:31.90ID:???使っているらしき人の発言はたまにみられる
#gaeja
0762nobodyさん
2012/05/02(水) 22:53:55.45ID:7IfG5hXX0764nobodyさん
2012/05/03(木) 20:42:54.96ID:DuxvjcV4BANされちゃうのかな?
0765764
2012/05/03(木) 20:44:22.89ID:DuxvjcV4独禁法も関わってきそう
0766nobodyさん
2012/05/03(木) 20:45:33.72ID:???0767nobodyさん
2012/05/04(金) 23:01:10.23ID:???学生さんならしょうがないけど25過ぎてそんな幼稚な発想してるんならもう総てを棄てて山で生活した方がいい
現代社会は向いてない
0768nobodyさん
2012/05/05(土) 02:07:23.27ID:???0769nobodyさん
2012/05/05(土) 02:28:29.95ID:/M1BVZkG0770nobodyさん
2012/05/05(土) 12:30:26.73ID:???0771nobodyさん
2012/05/05(土) 16:38:05.64ID:???0772nobodyさん
2012/05/05(土) 21:16:50.31ID:???0773nobodyさん
2012/05/06(日) 10:40:53.31ID:p1xwNEYE0774nobodyさん
2012/05/06(日) 12:23:03.86ID:???0775nobodyさん
2012/05/06(日) 14:57:25.32ID:???有料化して月9$払うくらいならさくらVPS借りてnginxでホストした方が早いし安上がりっていう
0776nobodyさん
2012/05/06(日) 15:05:01.93ID:???自分の技術料手数料その他もろもろコストゼロ円君
0777nobodyさん
2012/05/06(日) 15:27:12.46ID:???使わなきゃ引っかからないのは当たり前だな
0778nobodyさん
2012/05/06(日) 15:46:24.32ID:???実際は技術力のギの字も持たない学生か何かなんだから
そっとしておいておやり
0779nobodyさん
2012/05/06(日) 16:08:17.67ID:???0781nobodyさん
2012/05/09(水) 07:07:56.20ID:/5skeFJcremote_addrがdnsと対応付けられていた場合、
それを取得する事は出来ますか?
接続者のIPでドメイン(FQDN)を逆引きしたいって事です。
0782nobodyさん
2012/05/09(水) 21:31:15.47ID:???http://code.google.com/p/googleappengine/issues/detail?id=354
できなさそう
0783nobodyさん
2012/05/10(木) 01:24:10.01ID:XTWtcKra0784783
2012/05/10(木) 01:27:27.86ID:XTWtcKraPython to PythonまたはJava to Javaで
0785783
2012/05/10(木) 01:32:23.75ID:XTWtcKraサーバから送出されるトークンをMemcacheに入れておく事で
複数リクエストにわたってチャンネルを共有できないでしょうか
目的は認証つきの高性能なWEBアプリ連携です
「このアプリからしか接続を認めない」というアプリがあったとして、
毎回HTTPSでパスワードを送信させるのは性能が悪くなるので、
1度HTTPS+パスワードで接続させChannel APIのトークンを与えて
それ以降はチャンネルで通信をする、という事を考えています
0786nobodyさん
2012/05/10(木) 01:48:03.14ID:???0787nobodyさん
2012/05/10(木) 01:59:40.50ID:XTWtcKra同じ鯖というのは、同じアプリでって事ですか?
それも有力ではあるんですが、SaaSみたいな感じで
他人のWEBアプリに組み込んでもらえるような形で提供できないかなと思ったので
アカウント作成済みな人のサーバーに限定できないかと考えてるんです
0788nobodyさん
2012/05/10(木) 04:08:41.38ID:???Schibum Blog: Using Google Appengine Channel API with a Python Client
http://schibum.blogspot.jp/2011/06/using-google-appengine-channel-api-with.html
XMPPにすれば?
0789nobodyさん
2012/05/10(木) 06:10:19.16ID:XTWtcKraXMPPでも実現できそうです。
あと考えたのは、
app engine url fetch cookie
で検索したところcookieを使えるらしいので、
URL FetchのHTTPSでログインして、
返って来たcookie(ログイン状態)をMemcacheでセーブして複数リクエスト間で使い回せば
通信の大部分はHTTPでいけるんじゃないか、と思うんですが、どうですかね?
0790nobodyさん
2012/05/10(木) 08:08:42.47ID:???今日からニートになったからこのスレも活気が戻りそうだな
0791nobodyさん
2012/05/10(木) 13:00:00.44ID:???import jinja2
templates_path = os.path.join(os.path.dirname(__file__), 'templates')
jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path))
0792nobodyさん
2012/05/10(木) 13:14:37.31ID:???http://snipt.org/ujaq8
のように書きましたが
http://snipt.org/ujas0
>>28. IOError: [Errno 13] file not accessible: '/Users/noa/Developer/GoogleAppsEngine/account/[email protected]/examplewebsite/static/index.html'
のようにアクセルできません的なエラーがでました。
ちなみに、templatesフォルダでなく、アプリのルートにあるテンプレートは問題なく表示できました。
templatesフォルダ内のテンプレートを使用するにはどうすればいいんでしょう??
0793nobodyさん
2012/05/10(木) 14:41:35.72ID:???webapp2でjinja2使う場合はwebapp2_extras.jinja2を使うのが良い
app = webapp.WSGIApplication(
[
(r'.*', MainHandler),
],
debug=False,
config={
'webapp2_extras.jinja2': {
'template_path': [テンプレートフォルダパス,],
},}})
こんな感じにパスを渡せる
使い方は\Google\google_appengine\lib\webapp2\webapp2_extras\jinja2.pyに書いてある
0794nobodyさん
2012/05/10(木) 14:59:31.75ID:???0795nobodyさん
2012/05/10(木) 15:13:48.36ID:XTWtcKraJava版の文書が作成されたりしないのが意外
ちなみに>>786のMemcacheでセッションを使いまわすというのは成功しました。
0796nobodyさん
2012/05/10(木) 15:18:04.66ID:???せめて最新のgae sdkでも動くかどうかのテストだけでも…
0797nobodyさん
2012/05/11(金) 09:17:17.48ID:tjNJlBi3リクエスト毎に違うのか1日1回変わるのか数週間に1回か
わかる人いませんか?
0799nobodyさん
2012/05/14(月) 07:34:41.37ID:???GAE関連のハッシュタグが#gaejaってどうやって知ったの?
どっかに効率よく調べられるサイトあります?
0800nobodyさん
2012/05/14(月) 07:46:01.00ID:???かぶるので#gaejaに変えようってことになった。日本以外では#appengineが使われている
0802nobodyさん
2012/05/14(月) 09:22:56.58ID:???0803nobodyさん
2012/05/14(月) 09:49:58.84ID:???GAE関連のフレームワーク作っている人が、
今度から日本人用GAEのハッシュタグに「#gaeja」を使いましょう、と提案し
皆がそれに続いた感じ
0804nobodyさん
2012/05/14(月) 12:45:48.03ID:???連続して失敗するんだけど・・・
0805nobodyさん
2012/05/14(月) 13:12:51.64ID:???0806nobodyさん
2012/05/14(月) 17:52:13.95ID:G5bpTIUzGoogleがアップされたコードをリバースエンジニアリングしてパクる事があるのかどうかが知りたい。
そういう気が無いなら普通はポリシーに書くと思う。
最近のGoogleのポリシーに関する流れからして不安です。
恐らく、フェアユースの4つの判断基準からして、
リバースエンジニアリングしてパクったら米国でも違法なんだけど、
それでもポリシーに書いて欲しい。
0807nobodyさん
2012/05/14(月) 18:08:19.39ID:???■ このスレッドは過去ログ倉庫に格納されています