2012年06月26日

indexed=False にすると composite index(index.yaml)すら使えなくなる件

GAE では不必要な index は作らないというのが鉄則で、
class Hoge(db.Model):
  foo = db.StringProperty(indexed=False);
  sort = db.IntegerProperty(indexed=False);
という感じで indexed=False と書きまくりたいところなのですが、こうやってしまうと index.yaml に
- kind: Hoge
  properties:
  - name: foo
  - name: sort
などとやって、
SELECT * FROM Hoge WHERE name = 'xxx' ORDER BY sort
な感じの query を扱おうと思っても
PropertyError: Property 'name' is not indexed
なエラーが表示されてうまくいきません。
必要なのは name と order を組み合わせた index であって、name のみの index ではないはずなのですが、現在の仕様ではそんな柔軟なことにはなっていないようです。。。

http://code.google.com/p/googleappengine/issues/detail?id=4231

を見ると、2012/04/12
Issue escalated to the engineering team.
とのことなので、近々、対応されるのかもしれません。
posted by おちエン at 03:53| Comment(0) | GAE | このブログの読者になる | 更新情報をチェックする

2012年06月22日

JavaScript が Chrome で "Unexpected token ILLEGAL" というエラー

基本 Safari で開発してたので気がつかなかったのですが、Safari で正常に動く JavaScript が Chrome で動かすと、
Unexpected token ILLEGAL
というエラーで動かないことがわかりました。

やってることは、form を iframe 経由で送信して、エラーがあった場合は alert() でエラーを表示するだけのもの。
サーバ側は python + django で、python 側では、
error = self.__validate();
if len(error) != 0:
  data = {'error': "\n".join(error)};
としておいて、template では、
<script type="text/javascript">
<!--
    alert('{{error}}');
//-->
</script>
としているだけです。

google で検索したところ、JavaScript では改行はバックスラッシュを入れないといけないという。。。
error = self.__validate();
if len(error) != 0:
  data = {'error': "\\n".join(error)};
としてやれば正常に動きました。続きを読む
posted by おちエン at 03:13| Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年06月07日

iframeから親windowのdata()が利かない

iframe から親 window に保存しておいたデータを data() を使って取得しようとしましたが、全くうまくいきませんでした。

たとえば、親 window というかメインウィンドウで
$('body').data('hoge', '123');
などとしておいて、iframe で、
hoge = $('body', window.parent.document).data('hoge');
とやったのですが、hoge が undefined になってしまい全く値が取れませんでした。
しょうがないので、
$('body').attr('hoge', '123');
としておいて、
hoge = $('body', window.parent.document).attr('hoge');
とすれば望みどおりの動きはしてくれました。
ちなみに jQuery1.7.1 です。
タグ:jquery javascript
posted by おちエン at 08:32| Comment(0) | 開発 | このブログの読者になる | 更新情報をチェックする

2012年06月06日

VMWare Fusion 4.1.2 にアップデートでネットワークに接続できない・・・

いつも通り、VMWare Fusion を使っていると 4.1.2 にアップデートしませんか?とのメッセージが。
仮想マシンの再開時に表示されることがある「メモリ不足のメッセージ」が解決されました。
とのことで、ちょくちょくこのメッセージに悩まされていたのでアップデートすることにしました。
アップデート自体は自動的にやってくれるのですが、いざアップデートが終わって WindowsXP を立ち上げてもネットワークにつながらないというトラブルが発生しました。
検索してみましたが、これといった情報もなく、ダメもとで「VMWare Tools の再インストール」を行ってみましたが、これもダメ。
※「VMWare Tools の再インストール」は VMWare Fusion のメニューバー「仮想マシン」にあります。
最終的に Mac を reboot したら使えるようになりました。
アップデートの際に自動で Mac の restart をするなりしてほしい。。。
タグ:Mac VMware Fusion
posted by おちエン at 07:44| Comment(0) | Mac | このブログの読者になる | 更新情報をチェックする

2012年06月04日

BlobstoreUploadHandler で謎に改行(CR)が追加される

GAE で BlobstoreUploadHandler を使ってファイルをアップロードしつつ、textarea に入力されたものを保存するというコードを書いていたのですが、謎に \r (CR) が追加されてしまうという事象が起こりました。
環境は、Mac OS X 10.6.5 + GAE 1.6.5 + python 2.6.1 です。

画像アップロード付記事投稿フォームのようなものを想像してください。
記事表示画面では、
{{article.content|linebreaksbr}}
という感じにしておいて、投稿記事の編集フォームでは、
<textarea name="content">{{article.content|safe}}</textarea>
な感じにしたのですが、表示画面の方では投稿時に改行を2つ入れていれば <br> が2つ表示されて望み通りの動作をしましたが、編集フォームでは改行が4つも表示されるという怪現象に悩まされました。

logging.error() などを使って調べてみたところ、BlobstoreUploadHandler 経由で controller が呼ばれたときに、\r\n が \r\r\n と変換されていました。
なぜ、こんなことが起こるのか意味不明ですが、とりあえず、
content = self.request.get('content').replace('\r\r\n', '\r\n');
というやっつけコードで逃げました。

https://groups.google.com/forum/#!topic/google-appengine-python/cuZrHz3mDZQ を見ると、
I have experienced this problem as well.  
In addition to the equal sign (=) a line-feed is also added. 
とのことで同じ現象にあった人もいるようです。
とりあえず、= が入るという現象にはまだ遭遇していませんが。
タグ:GAE Mac
posted by おちエン at 10:01| Comment(0) | GAE | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。