perl
最近DBへの接続をリクエスト単位ではなくリクエストを処理するプロセス単位(Starmanのworkerプロセス単位)でキャッシュしたいということがあって、DBIのconnect_cachedを使うことになった。Scope::Container::DBIでももしかしたら出来るのかもしれないけど、…
DBIのconnectのCallbacksなどでSQLを実行している時とかに、実際にSQLが流れているのかチェックしたい時がある。そういう時どうするのがベスト・プラクティスなのかわからないのだけど、DBIx::QueryLogを使ったら一応できたのでメモ。 テストしたい状況 pack…
最近PrePANの開発を手伝っていて、Workerの仕組みをQudoで作りました。初めてWorkerの仕組みを一から作ったのでメモしておきます。 Worker処理に必要な部品、それぞれのQudoでの実装、Workerプロセスを管理するためのdaemontools、capistranoでのdeployとい…
以前http://d.hatena.ne.jp/shiba_yu36/20111021/1319209404でTest::Factory::DBIというモジュールを作ったと紹介したのですが、Prepanのここでレビューを求めたら、意見をもらえたので、DBIx::DataFactoryとして、インターフェースも少し変えて、shipitしま…
久々に思いついたモジュールを作ってみました。テスト用のデータを入れるために役に立つ(と思う)モジュールです。 Repository https://github.com/shibayu36/p5-DBIx-DataFactoryに置いてあります。 またPrepanにも上げました。レビューお願いします。http…
perlアプリケーションをVirtualHost環境で使うときに、ちょっと注意しないといけない点があったのでメモ。 Apacheの設定 VirtualHost環境で使うときには、それぞれの環境ごとで異なる@INCや環境変数を用いなければなりません。そのためにApacheの設定で以下…
この前、書いた Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - $shibayu36->blog; Re:Re:Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - $shibayu36->blog; ですが、Teng::Schema::Declare::Columns::DateTi…
Teng::Schema::DeclareにPlugin機構があったらいいのにって妄想してた - $shibayu36->blog; http://blog.nekokak.org/show?guid=AJRyCnVR4BGdRGA7MSAp_g nekokakさんに返答してもらえたので、もう一度考えなおしてみました。 Schema定義時以外に差し込む方法…
perlでメソッドキャッシュするいい方法ないかなと探していたら、Attribute::Memoizeがよさそうだったので、使ってみました。 やりたい事 同じメソッドにアクセスしたときに高速化するため、キャッシュを行うことってあると思います。例えばこんな感じ。 pack…
id:nekokakさんのTengの中のTeng::Schema::Declareを使ってて、あーこんな感じなのがあったらいいのになーって妄想してたのでメモしておきます。正直、必要なのかはわかりません。。。 やりたい事 例えば、現在のTeng::Schema::Declareを使って、DateTimeのi…
Test::Mock::Guard Released - 日向夏特殊応援部隊を見てちょっと使ってみたのでメモ。最初はこんな感じの使い方をしてた。 package test::Sample; use strict; use warnings; use Path::Class; use lib file(__FILE__)->dir->parent->subdir('lib')->string…
Mojolicious::Plugin::CSRFDefenderの機能を増やしてshipitしました。ワンタイムトークンを使えるオプションを増やしました。設定方法はこんな感じ。 plugin 'Mojolicious::Plugin::CSRFDefender' => { onetime => 1, }; ユーザから妥当なトークンが送られて…
perl5.8.9で下のように書いたスクリプトがなぜか死なずに実行される。仕様なのかわからないし、他のバージョンだと動作がおかしくなっちゃうのかどうかもわからないので、だれか分かる人がいたら教えて欲しいです。。。 追記 twitter上で教えていただきまし…
この前作ったMojolicious::Plugin::CSRFDefenderでオプションを使えるようにしました。下のような感じで使います。 plugin 'Mojolicious::Plugin::CSRFDefender' => { parameter_name => 'param-csrftoken', session_key => 'session-csrftoken', token_leng…
最近はMojoliciousを使ってWebアプリケーション開発を行っています。CSRFの対策をどうしようかなと考えていて、最初はPlack::Middleware::CSRFBlockを使っていたのですが、 Sessionとかの仕組みはApplicationと同じものを使いたい CSRF対策はApplicationの層…
MojoliciousでPlack::Middleware::CSRFBlockを利用したかったので、どうやって使うか調べてみました。 Mojoliciousの場合、Plack::Middlewareを利用するにはscript/sampleのようなサーバ起動用スクリプトをPlack::Builderを使うようにすると、利用出来るよう…
自分の作ったアプリケーションをデプロイするのって結構大変ですよね。今回はcapistranoを使って、perlのアプリケーションをデプロイ出来るようにしてみたので、そのやり方をまとめてみました。 capistranoとは 「複数の環境に同じ処理を同時に実行させる」…
最近Mojolicious + SkinnyもしくはTeng + XslateでWebアプリを書いているんですが、デプロイ作業をやってみたので、そのまとめです。合わせて以下の記事も読んでみてください。 Mojolicious + Xslate + SkinnyでMVC開発環境 - $shibayu36->blog; Mojo + Skin…
自分はいつもstaticファイルはプロジェクト下のstaticディレクトリに置くのですが、mojoliciousのデフォルトだとpublicの下になってたので、変える方法を調べてみました。Mojoliciousの場合はstaticファイルはMojolicious::Staticで扱っているため、startup…
以前、Mojolicious + Xslate + SkinnyでMVC開発環境 - $shibayu36->blog;の記事で紹介したMojo + Skinny + XslateでのWeb Application開発ですが、毎回毎回あの変更を加えるのは面倒なので、Module::Setupを使ってすぐに雛形を作れるように、Flavorを作成し…
Module::SetupでWeb Application作るときの雛形を作ろうと思ったんですが、テンプレートファイルに渡ってくるパラメータがいまいちわからなかったので、コードを読んでみました。 ファイルに渡ってくる変数 実際のテンプレート作成はModule::Setupのcreate_s…
Perlには非常に多くのフレームワークがあります。非常に大きいものにはCatalystやJifty、小さいものにはMojolicious、CGI::Application、HTTP::Engine、Dancerなどがあります。今Perlではフルスタックのフレームワークを使うよりも、小さいものを組み合わせ…
APIの認証ってどうやってるんだろーって思っているときに、Google Dev Quizで2-legged OAuthの問題があったので、やりながら理解する事にした。perlで書いてみました。 OAuthのcpanモジュールを使った場合 この場合、簡単にできます。OAuth::Lite::Consumer…
Task::Catalystをインストールしようとして、Berkeley DBのテストのエラーにはまったので、メモ。普通にインストールしたら、インストール後も前のBerkeley DBを使われて困った。理由としては、共有ライブラリのパスに含まれていなかったかららしい。 libtoo…
Snow leopardにDBD::mysqlをインストールしようとしたら、テストでエラーが出たので、解決法をメモ。 sudo cpanm -v DBD::mysqlとしたら、エラーが出た。MySQLがパスワードがないためにパーミッションエラーを起こしているせいで、テストが通らないらしい。…
標準で入っているperl5.10は何かと問題があるので、perl5.10.1をインストールする。よくmacportsを使ったインストール方法が書いてあるんだけど、なぜかこれだとインストールができなかったので、ソースからさくっとインストールする。 ダウンロード http://…