トップページphp
1001コメント298KB

Google AppEngine 3アプ目

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/02/25(木) 09:32:03ID:5mUqVSik
Google App Engine
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/

■リンク集
はてなブックマーク
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
0252Zeno ◆5nZQbNmQPs 2010/03/28(日) 20:51:28ID:M8LbN6As

>>251
以下の可能性が考えられる:

1. db.GqlQuery("SELECT * FROM hoge LIMIT 10") の結果はそもそも
pickle できない。

2. db.GqlQuery("SELECT * FROM hoge LIMIT 10") の結果は
pickle できるが、pickleされたオブジェクトサイズが上限である
1メガバイトを越えている。

どちらにしても、以下のようにしてキャッシュが
成功したか否かを確認できる:

cache_success = memcache.set("query", Queries, 10000)
logging.warning( 'Memcache: %s' % ((cache_success and 'success') or 'failure',))

自分で db.GqlQuery("SELECT * FROM hoge LIMIT 10") が
pickle できないかできるかを試してみても良い。

いつまで迷走してるんだ。早くやれ。
0253>247-2482010/03/28(日) 22:56:10ID:???
>252
GQLをキャッシュするのではなく、素直にHTML出力部をcacheする
ようにしました。Zenoさんいろいろありがとう。


さてさて、お陰様でGoogle App EngineでWebサービスつくってみましたー。

pugyatter m9(^Д^)プギャ---ッ
http://pugyatter.appspot.com/
0254nobodyさん2010/03/28(日) 23:05:40ID:???
>>253
見にいったらエラー出たぞ

BadQueryError: Parse Error: Expected no additional symbols at symbol /Name
0255>247-2482010/03/28(日) 23:10:14ID:???
>>254
ギャァァァァァァー

すぐに直します。
0256>247-2482010/03/28(日) 23:12:25ID:???
>>254
直しましたー
0257nobodyさん2010/03/28(日) 23:32:04ID:???
あやうく自分が m9(^Д^)プギャ---ッ されるところだったねw
0258>247-2482010/03/29(月) 00:07:12ID:???
>>257
本当ですねー。素人プログラマなんで大目に見てください。

さてさて、GQLのDBって「ID/Name」のカラムでソートできるのでしょうか?
このカラムってオートインクリメントになるのだろうか?
0259nobodyさん2010/03/29(月) 02:01:30ID:???
糞スレ落ちろ
0260nobodyさん2010/03/29(月) 07:33:09ID:???
このスレ気持ち悪い
0261>247-2482010/03/29(月) 21:11:24ID:???
>>260
キモくないスレを紹介してください
0262nobodyさん2010/03/30(火) 18:01:29ID:???
すみません、同じような経験がある人は教えて下さい。
JRuby on Rails でアプリ作ってます。
これをデプロイしてブラウザで見ようとすると、たいてい一回目は
「The server encountered an error and could not complete your request.」
のエラーが出てアクセスできません。
ただし、リロードかけると見れます。
これは、Railsが大きすぎるからなんですかね?
やはるSinatraとかじゃないとダメですか?
0263nobodyさん2010/03/30(火) 18:13:17ID:???
>>262
JRuby on Rails? あほすぎwww
0264nobodyさん2010/03/30(火) 18:35:54ID:???
Ruby信者必死でウケる
0265nobodyさん2010/03/30(火) 19:04:43ID:???
このスレ気持ちいい!!
0266nobodyさん2010/03/30(火) 20:35:19ID:???
>>262
ひがやすお氏のブログ見た感じ、Railsは現実的じゃないみたい。
Sintara でも使えるけどやっぱりネイティブサポートの Java や Python にくらべると相当辛い。

よっぽどの事情がないかぎりは GAE か Ruby のどっちかを諦めた方が良いと思うよ。今のところ。

ttp://d.hatena.ne.jp/higayasuo/20100319/1268984735
0267nobodyさん2010/03/30(火) 21:09:00ID:???
> Java や Python にくらべると

というか、 Java でも辛いんだけどね。
信頼できて実用レベルなのは Python だけだよ。
0268nobodyさん2010/03/31(水) 00:30:46ID:???
ひがさんの記事は Slim3 勧める記事だから Java 無理!とは言えない立場だしな。
0269nobodyさん2010/03/31(水) 06:58:43ID:???
AppEngineのロードマップが公開
ttp://code.google.com/intl/ko-KR/appengine/docs/roadmap.html

> Features on Deck
> - SSL for third-party domains
> - Background servers capable of running for longer than 30s
> - Ability to reserve instances to reduce application loading overhead
> - Ability to select different availability vs. latency options for Datastore
> - Support for mapping operations across datasets
> - Datastore dump and restore facility
> - Raise request/response size limits for some APIs
> - Improved monitoring and alerting of application serving
> - Support for Browser Push (Comet) communication
> - Built-in support for OAuth & OpenID

独自ドメインでもSSLが使えるようになる予定がいちばん最初に明記されていてよかった。
0270nobodyさん2010/03/31(水) 08:04:42ID:???
auだけどSMS受け取れなくてGAEできない。。
02712622010/03/31(水) 09:07:22ID:???
>>266-267
ご返答ありがとうございます。
ひがやすお氏の記事は拝見してましたが、それでもできる術はないかと、
悪戦苦闘しておりました。
0272nobodyさん2010/03/31(水) 15:07:07ID:???
>>270
>auだけどSMS受け取れなくてGAEできない。。
くわしく。auでもできるはずだけど?
0273nobodyさん2010/03/31(水) 16:41:19ID:???
SMSって、au用語でいうとc-mailのことじゃろか?
02742702010/03/31(水) 22:37:47ID:???
GAEのアカウント作成画面からauのメールアドレス入力

googleからメール来ない

auのメールにフィルタリングかけてたのが原因っぽい

フィルタリング解除して再度GAEアカウント作成を試みる

エラーメッセージが出る
The phone number has been sent too many messages or has already been used to confirm an account.

googleの問い合わせフォームからエラー解除依頼中←今ココ
0275nobodyさん2010/04/01(木) 02:12:01ID:???
>auのメールにフィルタリングかけてたのが原因っぽい

docomo ユーザーだけど同様に SMS フィルタしてて同じ目に遭った orz
0276nobodyさん2010/04/01(木) 02:22:13ID:???
どうやって乗り切ったの?
0277nobodyさん2010/04/01(木) 02:30:57ID:???
そのときはすぐ気付いたので
SMS フィルタ解除したら
リトライで間に合ったみたい
0278nobodyさん2010/04/01(木) 08:06:14ID:???
メールチェックしたらもうGoogleから返信が来てたw
やっとGAEできるぜヒャッハー!!

Hello,

You're receiving this email because you indicated you'd had some problems verifying your Google App Engine account using SMS. We just wanted to let you know we've enabled your account--you should be able to create applications now!

To start creating applications with Google App Engine, simply follow this link:

https://appengine.google.com/

Thanks!
The Google App Engine Team
0279nobodyさん2010/04/01(木) 08:44:09ID:???
実は地獄への入り口でした
0280nobodyさん2010/04/01(木) 14:00:35ID:???
登録で躓く奴は,次にどんな初歩的なところでコケるんだろうな
0281nobodyさん2010/04/02(金) 17:40:11ID:???
あるブログに、Datastoreへのput()は結構な割合で失敗することがあるから
必ず確かめるべし、と書いてあったんですが、成功したかどうかはどうやって
確かめるんでしょうか。

0282nobodyさん2010/04/02(金) 19:12:40ID:???
最近のアップデートでそのチェックをApp Engine側がやってくれるようになったはず。
0283nobodyさん2010/04/02(金) 22:31:10ID:???
javaのlow level api datastore触ってるんだけど
コレクションってどの種類いれても全部arraylistで返ってくるんですか?
0284nobodyさん2010/04/02(金) 23:59:07ID:???
>>281
ローカルサーバでの開発がそこそこ枯れているんなら、実際の運用上は、
 com.google.appengine.api.datastore.DatastoreTimeoutException
を投げてこないか見張るだけでほぼ問題ないような

最近のアップデートでは自動的に数回までリトライしてくれるようになったんだっけ?

java.lang.StackOverflowErrorとかjava.lang.OutOfMemoryErrorまで
見張りたいんなら、これはもうThrowableを投げてこないか見張るしかないっ。
0285nobodyさん2010/04/04(日) 12:22:27ID:???
GAEってエロサイト作ってもおk?
0286nobodyさん2010/04/04(日) 16:47:34ID:???
どうぞ
0287nobodyさん2010/04/04(日) 16:56:10ID:???
>>285
期待してます。
0288nobodyさん2010/04/04(日) 22:04:51ID:???
>>285
完成するまでオナ禁して待ってます。
0289nobodyさん2010/04/04(日) 23:58:38ID:???
これ携帯メールで認証する意味ってあんの?
メアド変更したら取り放題じゃん
0290nobodyさん2010/04/05(月) 19:28:29ID:???
何もしないよりゃマシ
0291nobodyさん2010/04/09(金) 22:06:10ID:VePKi7+I
うっかり本アカでGAE認証したんだけど、
hoge.appspot.comを作ったのはhoge@gmail.comのユーザーだ
みたいな情報って一般人に紐付けされたりする?
0292nobodyさん2010/04/09(金) 22:47:06ID:???
そんなばれたらはずかしいもん作るのかwww
って俺もそれ気になってたなぁ。

多分大丈夫だとは思う。
0293nobodyさん2010/04/09(金) 22:55:12ID:???
壱岐さんキタ━━━━━━(゚∀゚)━━━━━━ !!!!
0294nobodyさん2010/04/09(金) 23:10:05ID:???
>>291
初期の頃は6文字以下も作れたし既にgmail名取られた奴でも作れた
なので多分それは無い
そもそもアプリ共有出来るし紐付けって考えは意味無いと思う
気になるなら別のアプリ名で取り直してhogeは放置しておくのが吉
0295nobodyさん2010/04/09(金) 23:43:20ID:???
質問ですが、数百万件規模のデータをGAE上で日々集計してレポート形式で表示する、
といった要件にGAEは向いているのでしょうか?

少し調べた範囲だとタスクキュー使ってデータ分割しながら集計すれば
やれなくはなさそうですが、厳しいですかね?


0296nobodyさん2010/04/10(土) 06:47:37ID:???
厳しいです
0297nobodyさん2010/04/10(土) 10:38:20ID:???
>>296
むー、そうですか…ありがとうございました
0298nobodyさん2010/04/10(土) 11:14:43ID:???
>>295
重い処理は10−30秒程度が限界で、それ以上はエラーでるよ。

Queueは非同期処理で利用するものじゃない?
0299nobodyさん2010/04/10(土) 11:31:53ID:???
>>295
Google さんからは Scalable な書き方として
データ追加時に一緒に逐次集計しろというお達しがある
0300nobodyさん2010/04/10(土) 14:32:57ID:???
1994年生まれの人集まれ!★3
http://gimpo.2ch.net/test/read.cgi/nendai/1269784099/
0301nobodyさん2010/04/11(日) 11:21:59ID:DpoFQfFh
target = 'A100'
query = Test.all()
query.filter('code =', target.encode('utf-8'))
query[0].item='ABC'
query[0].put()
とやっても更新される気配がないんですが、
どうすればレコードを更新できますか
0302nobodyさん2010/04/11(日) 12:37:38ID:???
query[0].item='ABC'
query[0].put()
でうまくいってなさそう。
instance = query.fetch(1)[0] か instance = query.fetch(1)
instance.item = 'ABC'
instance.put()
としたらどうでしょう。
0303nobodyさん2010/04/12(月) 16:50:03ID:+DZBAaxO
# -*- coding: sjis -*-
import cgi
print 'Content-Type: text/plain\n'
print '<html><head></head><body><form action="?guid=ON&cmd=regist" method = "post">'
print 'あなたの名前は<br><input type="text" name="name" maxlength="10" istyle="3"><br>'
print '<input type="submit" value="答える"></form>'
f = cgi.FieldStorage()
if f.has_key('cmd') and f['cmd'].value=='regist' and f.has_key('name'):
print 'name=%s<br>' % f['name'].value
ローカルでは動くのにGAE上では値を受け取れないのはなぜですか
0304nobodyさん2010/04/12(月) 17:26:16ID:???
registってなに
0305nobodyさん2010/04/12(月) 18:17:44ID:???
>>303
sjis
0306nobodyさん2010/04/13(火) 11:12:29ID:???
これ10個アプリ作れるけど
間違って作った奴消してもまた10個作れる?

それとPV月500万までって事だけど
一つのアプリに対して500万PV?
それとも10個全部あわせて500万PV?
0307nobodyさん2010/04/13(火) 13:15:18ID:???
作れる
0308nobodyさん2010/04/13(火) 21:53:37ID:???
アプリを登録したら消せないんじゃなかったっけ?
0309nobodyさん2010/04/14(水) 10:10:53ID:???
前は消せなかったけど今は消せるようになった
消すお願いをしてから3日くらい掛かるけどw
0310nobodyさん2010/04/14(水) 16:39:10ID:???
    ヘ⌒ヽフ
   ( ・ω・) dd
   / ~つと)
0311nobodyさん2010/04/14(水) 20:33:23ID:???
携帯もってない。
誰かヤフオクでAppengineのアカウント売ってくれ。
0312nobodyさん2010/04/14(水) 20:46:46ID:???
この2つのクエリの実行方法の違いってなんでしょう?

# fetchした場合
query = Model.all()
res = query.order('date').fetch(100)

# iterableの場合
query = Model.all()
res = query.order('date')
0313nobodyさん2010/04/14(水) 20:54:17ID:???
>>312
返り行を指定しているかどうかじゃないの?
0314nobodyさん2010/04/14(水) 20:58:59ID:???
>>311
携帯持ってる友達はいないのか?
0315nobodyさん2010/04/14(水) 23:32:58ID:???
>>312
>この2つのクエリの実行方法の違いってなんでしょう?
>
># fetchした場合
>query = Model.all()
>res = query.order('date').fetch(100)

これは Model オブジェクトを要素とするリストになる。

>
># iterableの場合
>query = Model.all()
>res = query.order('date')

これはリストではなく google.appengine.ext.db.Query オブジェクト。
この時点ではまだDatastoreからデータをとってきていない。
0316nobodyさん2010/04/14(水) 23:47:27ID:???
pythonのインタラクティブシェルからapp engineを使う方法はありますか。
ちょうどRailsでいうところの script/console がほしいです。
0317nobodyさん2010/04/15(木) 00:17:02ID:???
main.py の sys.path.append のところを手で実行したら使えますよ
0318nobodyさん2010/04/15(木) 06:36:48ID:???
>>317
main.py ってどのmain.pyでしょうか。
$ find google_appengine -name 'main.py'
../google_appengine/lib/antlr3/antlr3/main.py
../google_appengine/lib/django/django/contrib/admin/views/main.py
../google_appengine/new_project_template/main.py
どれにも、sys.pathを設定しているような箇所はなさそうです。
0319nobodyさん2010/04/15(木) 07:04:23ID:???
aho
0320nobodyさん2010/04/15(木) 14:34:15ID:???
GAEでGeoIP(http://www.maxmind.com/)は使えないんでしょうか?
ローカルのPythonだとOKなんですが、GAE環境だと

ImportError: No module named GeoIP

が出てしまいます。。
0321nobodyさん2010/04/21(水) 01:22:50ID:???
>>315
このfetchとiterableってどう使いわけすればいいの????
0322nobodyさん2010/04/21(水) 19:05:15ID:???
>>321
複数の要素をとってきてfor文を使う場合はiterable
ひとつの要素だけをとってきた場合はfetch
それいがいの場合はケースバイケース
難しければぜんぶfetchでいいよ、効率悪いかもしれないけど
0323nobodyさん2010/04/21(水) 21:23:46ID:???
>>322
fetch、ひとつというよりは、Queryに合致した要素すべてをforとかで処理したい場合だと思う。
iterableをforで回した場合って、Datastoreへのリクエスト数が増えるのかな?
0324nobodyさん2010/04/21(水) 22:00:47ID:???
代わりに(Datastoreをサーバ側として)クライアント側の使用メモリは減るわな
0325nobodyさん2010/04/21(水) 22:10:54ID:???
rangeとxrangeの違いと似たようなもんかね。
0326nobodyさん2010/04/22(木) 01:27:40ID:???
数値idってエンティティがDatastoreに保存された順番で上がっていくんでしょうか?
例えば下記のようなモデルがあって__key__で昇順にソートしたクエリは
dateを昇順にソートしたクエリと同じでしょうか?

class A(db.Model):
 date = db.DateTimeProperty(auto_now_add=True)
03273262010/04/22(木) 10:17:45ID:???
>>326
テストしてみましたが、ローカル環境だとキレイに順番でidがふられますが本番環境だとバラバラですね。
0328nobodyさん2010/04/22(木) 19:17:14ID:???
id は自分で振る方が良い
max 値を記録する Entity を別に作れと
google の中の人も言っている
0329nobodyさん2010/04/23(金) 15:51:22ID:???
>>323
>iterableをforで回した場合って、Datastoreへのリクエスト数が増えるのかな?
増えないと思うけど。
0330nobodyさん2010/04/23(金) 21:15:43ID:???
推測。。
0331nobodyさん2010/04/24(土) 00:19:16ID:???
本番環境にcsvで10万行ぐらいアップしたんですが、
このデータを1度に削除するにはどうすればいいですか?
0332nobodyさん2010/04/24(土) 07:30:50ID:???
アカウントを削除すれば
0333nobodyさん2010/04/24(土) 19:14:05ID:???
>>331
200件程度毎に削除するURLを用意して、1秒後にMeta Refreshでページを
再読み込みするしか方法がないらしいよー
0334nobodyさん2010/04/24(土) 19:33:22ID:???
まさかの田代砲
0335nobodyさん2010/04/24(土) 23:40:23ID:???
>>262 >>271
spinupタイム(初回起動の時間)がものすごい長くてエラーおこしてるんだよね。
Javaも長いみたいだけど、その上で動くJavaよりもかなり重いJRuby、
さらに重めのフレームワークなRails、この組み合わせはapp engineにすごく悪いみたいよ。

どうしてもRubyやRailsやりたいなら、herokuをオススメしておくよ。
JRuby on AppEngine でいろいろ苦労したあとheroku使うと楽すぎて笑うから。


spinupって次回に備えてメモリに読んでおくことなん?
mod_なんとかでも放置したあとにアクセスするとすごい時間掛かったりするけど

>>333
MovableTypeで再構築長すぎで500エラーでるからとページ自動読み込みしていくアレかとおもた
0336nobodyさん2010/04/24(土) 23:47:48ID:???
まあRuby厨は苦労してろってこった
0337nobodyさん2010/04/25(日) 01:44:40ID:tJ0/rB3Q
entityの元クラス変えちゃったらアプリで削除はできないんだっけ
0338nobodyさん2010/04/25(日) 03:05:29ID:???
>>332
アプリケーションの削除が一番楽だけど
依頼してから削除されるまでに3日くらいかかる
それにデータまでちゃんと削除されてるかどうかはあやしい
あとで同じアプリケーション名が使えるとは限らない
などの欠点が多すぎ
0339nobodyさん2010/04/25(日) 05:46:49ID:???
そういや今は同じアプリケーション名使えないっぽいな
昔は出来たからそのノリで3日後登録しようとしたけどSorryだった
0340nobodyさん2010/04/29(木) 20:22:19ID:TZ2OdXi4
携帯AdsenseをGAE/Pyで使う方法はないだろうか
0341nobodyさん2010/04/30(金) 11:45:34ID:???
>>340
PHPやらJAVAのコードをPythonに移植したら良いじゃない
0342nobodyさん2010/04/30(金) 15:19:39ID:i/Dpf9nq
http://kingyo-bachi.blogspot.com/2009/09/pythonadsense.html や
http://tripleodeon.com/2009/03/python-google-adsense-for-mobile-code/ や
http://github.com/johnboxall/django-mobileadsense を参考にしてやってみたら、
広告は表示されるんだけど表示回数に反映されないんですよね

PHPのfopen、freadで開くとちゃんと反映されるのに
ほぼ同じ(はずの)リクエストをPythonのfetchやurllib.urlopen(url).read()でやると、広告はちゃんと返ってくるのに反映されない…
原因わかる方いませんか?
0343nobodyさん2010/04/30(金) 18:48:35ID:???
ttp://random-meigen.appspot.com/
これGAEだよね?
ランダムって出来ないんじゃなかったっけ?
0344nobodyさん2010/04/30(金) 21:18:35ID:KvqVTUts
>>343
工夫はいるけどできなくはないな
0345nobodyさん2010/04/30(金) 21:40:04ID:???
どうやんだろ、1万件の名言があったら100件ごとにカーソル保存する別のテーブル用意して2回100までの乱数生成して飛ぶとか?
こんなんしかおもいつかん
0346nobodyさん2010/04/30(金) 22:08:26ID:???
IDの古い方から100件抽出して一つ選び表示
表示したものを一度削除して、新しく挿入
でいいんじゃない
0347nobodyさん2010/04/30(金) 22:50:26ID:???
↑これはないw
0348nobodyさん2010/04/30(金) 23:12:15ID:KvqVTUts
同じ名言が結構出てくる所を見ると、登録数は1万も無いんじゃね?
1000件以下なら単に乱数で行けるし
0349nobodyさん2010/04/30(金) 23:47:20ID:???
削除しない前提ならincrementするIDからランダムに1件抽出できるが・・・
0350nobodyさん2010/05/01(土) 00:12:37ID:???
ああそうか登録するのも仮に削除するとしても自分だけだし単にID振りゃいいのか
0351nobodyさん2010/05/01(土) 05:11:26ID:???
ハイレベルIT戦士の集うスレですね!
■ このスレッドは過去ログ倉庫に格納されています