Google App Engine for Python 6アプ目
■ このスレッドは過去ログ倉庫に格納されています
あ、ごめんそもそもover_quota dos_api_denial timeoutしかハンドルされてないみたいね
404はハンドラの最後にそれ以外のすべてのURLを対象にして
- url: /.*
static_files: htdocs/index.htm
upload: htdocs/index.htm >>257
デフォルトの404が出ます。
- url: /
static_dir: htdocs
ですでにすべての下位URLに割り当てられているせいだと思います。 なんか変な方向にいってるけど、webapp2の例外ハンドラを実装するだけの話じゃないの?
ttp://webapp-improved.appspot.com/guide/exceptions.html Blobstore使う時に、同じ画面で「画像ファイル指定」と「文字入力」を同時にさせたいことが良くあるじゃないですか。
で、「文字入力」欄に日本語が入力されると、文字化けしませんか?
ローカル開発環境だと日本語が入力されても問題なく処理できるんですけど、本番環境だと文字化けするような・・・どうしよこれ。 LINEに数年前にデートしたデパガが現れたから声かけたら
気がついたら食事に行く話になってた
細かい日程まで決めてないからこのままフェードアウトしよっと Goolgeのhelloworldアプリが以下のエラーで起動すらできないのですが何か原因分かりませんか。
Google App Engine Launcherやコマンドプロンプトでdev_appserver.pyを直接動かしても起きるようです。
2013-12-20 00:35:58 Running command: "['C:\\Python27\\pythonw.exe', 'C:\\Program Files\\Google\\google_appengine\\dev_appserver.py', '--skip_sdk_update_check=yes', '--port=8080', '--admin_port=8000', 'D:\\develop\\work\\python\\helloworld']"
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\dev_appserver.py", line 197, in <module>
_run_file(__file__, globals())
(中略)
File "C:\Python27\lib\mimetypes.py", line 249, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 9: ordinal not in range(128)
2013-12-20 00:35:59 (Process exited with code 1) なお環境は WinXP 32bit, Python 2.7.6, GAE SDK 1.8.8 です >>266
ググればすぐに情報が見つかるよ。
レジストリのHKEY_CLASSES_ROOT\MIME\Database\Content Typeに
ASCII以外の文字を含むタイプ名が登録されていると例外が発生する。
QuickTimeがロシア語の名前を登録するのが原因らしい。 >>268
詳細な情報ありがとうございます。
Windows環境で発生するというのは見かけましたがそういうことだったんですね
一応Pythonのバージョンを2.7.5にすると動くことを確認しました。
レジストリの掃除はちょっとホネが折れそうなのでこれでしのぎます 基本的なことだと思うんだけどunique制約がないから
重複登録の防止ってどうやってる?
いちいち全データを取得して被ってないかチェックしか思いつかない・・ 結果をkeyで取得すれば高速だし重複処理もできるからそうしてる Invalid arguments
Runs a development application server for an application.
dev_appserver.py [options] <application root>
Application root must be the path to the application to run in this server.
Must contain a valid app.yaml or app.yml file.
と先頭にダラダラと怒られます。どうすれば良いでしょうか? pythonのバージョンは2.7.2
GAEのは1.7.5
OSはWindows7
一応、この環境で学校のは動いたのですが、自分のが動かないです。
困ってるの教えてください。 dev_appserver.pyの起動オプションが間違ってるって書いてあるじゃん
ランチャかpydevの起動オプションチェックした? >>274
ランチャかpydevの起動オプションチェックするってどういうことですか?
(学校の同じ環境で、コマンドでオプション何もつけずに、うまく行ったんですけど) >>276
ルートディレクトリが違うってどういう意味ですか? 素直に先生に相談してみたら.
何のために学費払ってんの >>277
app.yamlがあるフォルダへ移動して
dev_appserver.py .
(半角ピリオド)
としてみたらどうだ?
あと、家のGAEバージョンは? >>278
先生がギブアップしてしまった。
>>279
>>273に一通り書いたつもりだけど、GAEのバージョンは1.7.5です。
C:\Users\Y.Sato\Desktop\GAE>"C:\Program Files (x86)\Google\google_appengine\dev_
appserver.py" ae-00-testing
こんな感じでコマンド打ってます。
半角とピリオドつける場所、わかりません。。。 >>280
デスクトップのGAEフォルダの下に、
ae-00-testing というフォルダがあって、
そのフォルダ内にapp.yamlがあるの?
cd ae-00-testing してから
dev_appserver を叩いたらどう? >>281
一つ目の質問は、そういうことです。
それだと、上手くいかないですね。 コマンドプロンプトで
dir C:\Users\Y.Sato\Desktop\GAE
dir C:\Users\Y.Sato\Desktop\GAE\ae-00-testing
やって結果晒して 2013/12/17 16:26 <DIR> .
2013/12/17 16:26 <DIR> ..
2013/12/03 16:44 <DIR> ae-00-testing
2013/12/14 23:53 <DIR> ae-01-webapp
2013/12/17 16:24 839 ae-01-webapp.zip
2013/12/15 17:18 <DIR> ae-04-templates
2013/12/17 16:26 2,343 ae-04-templates.zip
2 個のファイル 3,182 バイト
5 個のディレクトリ 386,548,281,344 バイトの空き領域
2013/12/03 16:44 <DIR> .
2013/12/03 16:44 <DIR> ..
2013/12/31 13:59 110 app.yaml
2013/12/29 23:14 68 index.py
2 個のファイル 178 バイト
2 個のディレクトリ 386,547,691,520 バイトの空き領域 pastebin.comにdev_appserver.pyを実行したときのエラーメッセージを全部貼れ >>287
..\GAE>python "C:\Program Files (x86)\Google\google_appengine\dev_appserver.py" ae-00-testing
先頭に"python"をつけて実行してみて >>288
いけました! ありがとうございます!
これ、学校の先生に報告したら、喜ばれる!
(でも、何が学校と違ったんでしょうか??) >>289
プロンプトでこれを実行して
>assoc .py
.py=ほにゃらら
みたいなのが出力されるから
>ftype ほにゃらら
を実行
その出力結果を貼って >>290
C:\Users\Y.Sato\Desktop\GAE>assoc .py
.py=Python.File
C:\Users\Y.Sato\Desktop\GAE>ftype Python.File
Python.File="C:\Python27\python.exe" "%1" %* 関連付けが間違ってるのかと思ったらそうではないようだ
原因は分からん
エラーメッセージから何らかの原因で引数がうまく渡っていないことが
想像できた。こういう場合はOSがやらかしている可能性が高いので
直接python.exeを呼んだら出来たというわけ https://cloud.google.com/console/project
この左側メニューの課金>請求先アカウントの一部が勝手にキャンセルされてしまった。
テスト段階だから課金は当然$0の延滞なしなので理由不明。(課金を無効にしたまま暫く放置すると強制キャンセルされる?)
>この請求先アカウントはご利用いただけなくなりました。
>残りの請求書や料金、払い戻し(該当する場合)の詳細はこちらをご覧ください。
プロジェクトのほうから課金を有効にしようとするとエラーになる(=課金設定が必要なAPIが使えないという状態)
>サーバー エラー
>申し訳ございません。
>もう一度お試しください。問題が解決しない場合は、以下の [フィードバックを送信] を使ってお知らせください。
>下記の追跡番号をコピーしてフィードバックにご記入ください。よろしくお願いいたします。
>追跡番号: undefined
エラーの原因となっているであろう、参照中のキャンセルされた請求先アカウントを変更しようとしたが
そんなメニューはどこにもなく、請求先アカウントの再有効化のメニューもない。
完全に詰んだ。 >>294
まったく同じ現象でした
アカウントは別に使えるので
プロジェクトを作ってみたら作れました
古いプロジェクトは様子見て削除 今みたら課金有効化のエラーメッセージが変わってた
>サーバー エラー
>申し訳ございません。
>もう一度お試しください。問題が解決しない場合は、以下の [フィードバックを送信] を使ってお知らせください。
>下記の追跡番号をコピーしてフィードバックにご記入ください。よろしくお願いいたします。
>追跡番号: undefined
↓↓↓↓↓↓↓↓
>サーバー エラー
>undefined
Googleさんよ、頑張ってなおしてくれ
このままだとAWSに揺らぐ気持ちを抑えられない 請求先アカウント名 ステータス
Billing Account for XXXX 閉鎖
Billing Account for XXXX 閉鎖
Billing Account for XXXX 閉鎖
Billing Account for XXXX 閉鎖
この請求先アカウント一覧リストにも削除メニュー必要じゃねって毎回思ってる
閉鎖して関連付けられなくなったアカウントが残り続けているのは見た目、心象ともに悪し
コメント欄追記でバージョン管理している会社のソースコードの手直しを任された感じといえば分かるだろうか
頑張って直してくれ >>294
あとapp engine のbilling settingsで決済カードを編集したり削除して改めて登録することもできます pydevのアップデートをチェックしてアップデートしたあと
デバッグしようとすると
ImportError: No module named json
というのが出て それはdjangoの中へのパスをプロジェクトプロパティの
pyshonpathで指定したら出なくなったんですが
次に
Unexpected error setting up the debugger
Socket operation on nonsocket: configureBlocking
が出て来ました
回避方法・元に戻す方法などなんでもいいので教えてください
win8.1 64
eclips kepler
pydev 最新のをPyDev Update Site - http://pydev.org/updates/から再インストールしてみました
何卒お助けください アプリケーションランチャーおよびコマンドプロンプトからは開発サーバーが起動できます
Pydev のStart Debug Server も起動できます
pydevのDebug Configrationsを使ったデバッグで失敗します
コンソール出力です
pydev debugger: warning: psyco not available for speedups (the debugger will still work correctly, but a bit slower)
pydev debugger: starting
pydev debugger: google app engine integration enabled
WARNING 2014-01-31 14:27:42,539 urlfetch_stub.py:115] No ssl package found. urlfetch will not be able to validate SSL certificates.
WARNING 2014-01-31 14:27:42,628 rdbms_mysqldb.py:74] The rdbms API is not available because the MySQLdb library could not be loaded.
Error: option --python_startup_script not recognized
Runs a development application server for an application.
dev_appserver.py [options] <application root>
Application root must be the path to the application to run in this server.
Must contain a valid app.yaml or app.yml file.
Options:
--address=ADDRESS, -a ADDRESS
<以下略>
option --python_startup_script
についてぐぐってみましたが有力な情報が出てきません
pydevをダウングレードする方法はないでしょうか?
よろしくおねがいします pydevをダウングレードしたら直りました
お騒がせしました DataStoreへのアクセスを減らすためにmemcacheを使おうと思ってるのですが、
これってアクセスされないデータから順に削除される見たいな記述があるんですが、
必ず消されないデータみたいなものって定義できます?
やりたいこととしては、頻繁に書き換えられるエンティティがあるんで、
それをキャッシュしておいて、
書き換えが発生した場合、キャッシュのみを更新していって、
30分とか1時間とか決まった時間経過するとバッチで、
DataStoreに書き込んで最新化するようにしたいんです。 NDBは書き込みにキャッシュ無いよ
読み込みのキャッシングにmemcache使ったり
コンテキスト内でのキャッシュがあるぐらい
消されないデータってのはmemcacheじゃ無理
そもそも永続化の仕組みじゃないんだから
いつ消えるか分からないし保証はない
何を扱ってるか見えないからこれ以上言いようが無いけど
途中の更新が喪失しても問題ないものなら
memcacheに通常書き込んで
ただtaskqueで30分おきとかで永続化したら? memcacheは読み出しのキャッシュなんだし
存続時間に保障がない仕様なんだから
リスク覚悟でやるしかないね
作るのは簡単なんだし Discounted Instanceみたいなbackend用の割引サービスほしいのお GAEで静的サイトアプリ作った場合
こんな感じでindex.html置いて
http://www.hogehoge.com/oppai/index.html
後ろの/が無いとアクセス出来ないんだけど
X http://www.hogehoge.com/oppai
○ http://www.hogehoge.com/oppai/
上が表示出来て下が出来ないのはapp.yamlの書き方間違ってる?
app.yamlはこんな↓
application: アプリ名
version: 1
runtime: python
api_version: 1
handlers:
- url: (.*)/
static_files: htdocs\1/index.html
upload: htdocs(.*)/index.html
- url: /(.*)
static_files: htdocs/\1
upload: htdocs/(.*) 過疎ってるからレスあるのか不安だけど質問していい?
many-to-many(多対多)が必須なアプリケーション
(Twitterならuser-timeline)ってGAEじゃ作れないよね?
timelineにListProperty付ける方法だと
数万人のフォロワーにtimeline配信(Fanout)するの無理だし
(仕様です、で押し通すのはちょっと…)
UserTimelineの結合テーブル用意する場合だとパフォーマンス的に問題あるよね
特にFanout書き込み処理時
(書き込みあるごとにフォロワー数万人分の参照用データを書き込み…)
(TaskQueueに投げて処理するとコスト高くないかい?) >>310
そういうのこそ Google App Engine が大好きな分野だろう
パフォーマンス的にも、100% 問題ない。 対多だったらCloud SQLかと思ってたけどそうでもないの?作り方次第? app = webapp2.WSGIApplication( [('/',OpenPage), ('/result',PostPage) ], debug=True )
という形で作ったんだけど
index.htmlみたいな物は無いのでしょうか? すごく久しぶりに弄ろうとしたら
いつのまにか 10 個から 25 個にアプリケーション枠増えてるのね ネイティブスマホアプリのバックエンドに使ってみようかな >>141
試しにアプリ増やしてみたけど Python 2.5 でもまだいけてる
>>131
どんどん使いやすくなるね
ユーザー少なすぎてサービス終了にならないかどうか心配 >>316
マジ!?
>>319
Amazonの方に人が流れてそうだから心配。Googleには頑張って欲しい。 まじかー、結構グラフ赤になること多かったから1ドル運用してみっかな 俺は使わんが、PHPに対応したのはいいと思う
次はRubyだな
Herokuの客層を取り込めれば大きい >>319
ロックイン上等のシステム作っておいて
勝手に終了されたら潰れちゃう会社出てくるだろ
AWS向けに移植するにしても金かかるんやぞw
フロントエンド(HTML&JavaScript)部分は流用できるとしても
データストア関連のコードは全部書き直しだわ だから心配してるんだよ
簡単に引っ越せたり
そもそもどうでもいいサービスなら
客減ろうが潰れようが
どうなろうと知ったこっちゃない データストア関連のコードを抽象化するレイヤーでwrapすれば良いNONI AWS の SQL で Master/Slave とか HRD の
Datasore をエミュレーションする python ラッパー作ったら需要あるかな
それなら最初から AWS で造った方が良いか >>325
そんな大事なサービスをGAEで作っちゃったんですか!?
て話になる。 初心者質問ですみません。サービスを作って公開したところへスクリプトか何かでアタックされたら一気に課金枠内上限までいってサーバーが停止してしまうのでしょうか。Googleが感知してIPを弾いてくれたり、何らかのガードはGAEにデフォルトで付いてるのでしょうか。
もしそういった仕組みが無ければみなさんその辺りは自分で対策されているのでしょうか。 >>324
データストア関連コードの書き換えなんてそんなに面倒かな? >>331
一日単位で課金の上限に行くとサービス停止する
IP弾く機能はあるけどIPの登録は自分でする必要がある
自分は月間の予算を3倍取っておいてサービス継続を優先してる
異常があったらすぐIP弾いたりする
いままで一番多いのはBINGBOTだったけどね
なくなったページにいつまでもアクセスしてくるからログがそればっかりになる
302返さない自分も悪いんだけどさ へんなアクセスの IP はプログラム自信で見つけることは可能なので自動化したいけど
IP の登録はダッシュボードからしか出来ないのかな?
アク禁 IP 登録用の API とかある? >>334
ないよ
IPの登録はdos.yamlとかdos.xmlをアップロードすることで可能だから
ファイルアップロードをapp engine内で行えば可能かも >>333
レスありがとうございます。IPは手動登録なんですね。
ロボット向けにきちんと正しいステータスコードを返すべきというのも参考になりました。
>>335の方法も興味深いです。
ユーザー投稿有りでデータベースを増やしていく形のサービスの依頼(仕事レベルでは無い)を受けていて、アクセス過多以外にデータベースのデータ(イコールこのケースでは資産)をどうスクレイピングから保護するか、という事も気になっていました。
ベストはユーザー登録。
ユーザー未登録で投稿可能にするのであればIP監視も必要。
ユーザーエージェントもチェック。
IPやユーザーエージェントは偽装可能なので、他にクッキーかURLのquery経由で一時的なIDを渡してやってGAE側でvalidateする。
適当なIDを渡してもvalidateを通らないようにしておいて、一時IDはクライアントとGAE側で同じ生成アルゴリズムを用いて正当性を検証する。
というような事を考えています。
きっとまだ抜け穴はありそうなので引き続きデータ保護を検討してみます。 少し前にSimejiの騒動があったので、どう不正なアクセスからコンテンツのデータを保護するかという事が気になりました。
普段はクライアント側を書いていてサーバー側は初心者なのですが、万一参考になればと思って先の独り言の様な文章も投稿させて頂いた次第です。
スレ汚し失礼しました。 >>336
javascriptを使って認証cookei与えればjavascriptが走らない汎用Botは弾けるよ
ただ、そのサイト狙い撃ちでスクレイピングしてくるやつなら当然ソースハックして
対策はしてくるだろうけどそれもちょっと難読化して暗号化ロジック隠せば
半分くらいのBot作者の手には負えないかも
でも検索エンジン弾いちゃっていいのかってのはユーザビリティ考えるとどうなの?って感じ
ユーザーがそこまで望むならメールフォーム使ったユーザー登録くらい作るよね >>336
ユーザー登録は google account で代用出来る
不正なアクセスあったらそのアカウントを自分の DB でブラックリスト化する 自分のみ利用したいんですが
どこで設定するのでしょうか? 自分のみなら
app.yaml で require: administrator だったかな PC向けページしか無くてスマホからの利用は不便なので、
中継サーバーでスマホ向けにするような Webアプリとか作ってみたいんだけど。
ちなみに PC向けページはレコーダーのDIGA、
LAN内のサーバーは rep2 動かしてる Win版 XAMPP、
アクセスしたい端末は iPod touch。 pythonスレで誘導されてきました。
本文コピペになってしまいますが、以下、ご教示頂けないでしょうか。
宜しくお願い致します。
http://yono.cc/python/gae/
こちらを参考にして、HelloWorldを表示するだけのWebサーバを作りました。
上記ページの「webapp フレームワークで Hello World を書き直してみる。」のところに掲載されているソースコードをまるまる利用しています。
しかし、実際にブラウザでアクセスすると以下の様なエラーが出るのですが、これは何が原因なのでしょうか・・・?
Hello worldすら出来ないとかもうどんだけダメなんだ自分・・・
ERROR    2014-06-17 07:20:34,551 wsgi.py:262]
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 239, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 301, in _LoadHandler
    raise err
ImportError: <module 'test' from '/中略/channelapitesttest/test.py'> has no attribute app
INFO     2014-06-17 07:20:34,555 module.py:639] default: "GET / HTTP/1.1" 500 - >>348
ソースやyamlの何処かに'test.app'ってのがありそうだな
appって拡張子があるような罠 urlfetchでwait()をコールしないで通信が終わってるか確認する方法ってある?
asyncで並列で通信して早く終わったやつから先にwait()呼びたいのだけど。 168 デフォルトの名無しさん [sage] 2014/07/03(木) 17:10:36.81 ID:/QLPOJJ3 Be:
Dartプログラミング言語をGoogleのApp Engineがサポート…ついにサーバ言語としても位置づけ
http://m.jp.techcrunch.com/2014/07/01/20140629googles-dart-programming-language-is-coming-to-the-server/
これでW3Cは無理が有る様に思うが、きっかけにはなりそう。
あまり使いたいと思わせる要素は少ないな。あるのは数の力かな。
多分この辺りの言語戦争がWebKit内で有って分裂したんじゃ無いだろうか。表面は違うが。 てっきりGoと住み分けさせるのかと思ってたけど、割と普通に被らせちゃうのね ここでこちらに誘導されたので
http://peace.2ch.net/test/read.cgi/tech/1400479217/553
covendy を使いGAEにてデプロイして、htmlフォームから入力されたデータを一行ずつテキストファイルに書き込む処理をしているのですが、
処理に時間がかかり、deadlineを起こしてしまいます。
そこで Task Queue を使おうと思うのですが、使い方が分かりません。
なんらかのリンクを作り、そこにpostすることは分かったのですが、formからデータを取得するためにもう
def post(self)は使っていますが、その処理でもTask Queue は使えるのでしょうか?
また取得したデータの受け渡しは、どのように行っていますか? GAE じゃなくて Google Apps Script 使った方が良いかもね ■ このスレッドは過去ログ倉庫に格納されています