Craftworks Tech Blog - Branch このページをアンテナに追加 RSSフィード Twitter

2016-12-01

location設定に左右されない認証のかけ方

| 15:48 | location設定に左右されない認証のかけ方を含むブックマーク location設定に左右されない認証のかけ方のブックマークコメント

Wordpress などでマルチサイトやら色々設定していると、Basic 認証などかけたいときに、location ディレクティブの適用優先順位で混乱することがある。

そういうときは、下記のように記述すると、location ディレクティブの設定の影響は受けないので、すっきりかける。

http コンテキストで map で認証をかけたい場所を設定する。

    map $request_filename $auth_realm {
        default off;
        ~*/wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ 'wp-admin';
    }

server など認証をかけたいコンテキストで認証をかける。

    auth_basic_user_file /path/to/.htpasswd;
    auth_basic $auth_realm;

2014-03-11

FormValidator::Lite で Xslate のテンプレートの文法チェックをする方法

| 08:57 | FormValidator::Lite で Xslate のテンプレートの文法チェックをする方法を含むブックマーク FormValidator::Lite で Xslate のテンプレートの文法チェックをする方法のブックマークコメント

そこそこ大きい Web アプリを作ってると非エンジニアに管理画面でテンプレート編集させたりするケースもあると思いますが、文法チェックをしないと、テンプレートレンダリングできないがためにシステムがコケるとかいう悲しい事態が起こったりするので、チェックを通ったもののみ保存したいというニーズもたまにあると思います。

そこで、ヴァリデーターをかましてチェックすることにしてみました。

package MyApp::FormValidator::Constraint;
            
use strict;
use warnings;
use FormValidator::Lite::Constraint;
use Text::Xslate;
use Try::Tiny;
            
our %ErrStr;
my $xslate = Text::Xslate->new;
            
rule 'CAN_RENDER' => sub {
    return try {
        $xslate->render_string($_);
    } catch {
        $ErrStr{'CAN_RENDER'} = $_;
        return 0;
    };
};

1;

こんな Constraint クラスをこしらえて、

FormValidator::Lite->load_constraints(qw/Email +MyApp::FormValidator::Constraint/);

my $validator = FormValidator::Lite->new(...);
$validator->check(
    'template' => [ 'NOT_NULL', 'CAN_RENDER' ],
);

テンプレートエラーメッセージも後から参照したかったりするので、とりあえず$MyApp::FormValidator::Constraint::ErrStr{'CAN_RENDER'} に Xslate が吐くエラーメッセージ突っ込んでおきましたが、相当ダサいのでもうちょっとスマートな方法で実装したいです。

2013-10-18

Ubuntu に公式レポジトリの nginx を入れる

| 14:48 | Ubuntu に公式レポジトリの nginx を入れるを含むブックマーク Ubuntu に公式レポジトリの nginx を入れるのブックマークコメント

Ubuntu 12.04 LTS でデフォルトで入る nginx パッケージは現時点(2013/10/18)でバージョン 1.1.19 と大分古いです。最新バージョンは 1.4.3 なのでレポジトリapt に登録します。

sudo add-apt-repository ppa:nginx/stable

あとは、普通にインストールするか、既にインストールされていれば下記でアップグレード可能です。

sudo apt-get update
sudo apt-get upgrade

2013-02-15

nginx + php5-fpm で真っ白なページしか表示されない時の対処

| 02:05 | nginx + php5-fpm で真っ白なページしか表示されない時の対処を含むブックマーク nginx + php5-fpm で真っ白なページしか表示されない時の対処のブックマークコメント

大分ハマりました。

ubuntu/12.04
nginx/1.2.7
php5-fpm/5.4.6

結論から書くと、Nginx 公式のリポジトリから取得したパッケージには、fastcgi_param 用の設定がデフォルトで一通り入っていますが、いくつか記述が無いものもあります。

下記の PATH_TRANSLATED を追加したら無事動きました。

fastcgi_param PATH_TRANSLATED   $document_root$fastcgi_path_info;

「nginx php5-fpm blank page」などググったら色々出てきますが、PATH_TRANSLATED に直接触れているのは少なかったです。

2013-01-19

Ti.Filesystem.File で知らないとハマること

| 23:25 | Ti.Filesystem.File で知らないとハマることを含むブックマーク Ti.Filesystem.File で知らないとハマることのブックマークコメント

Ti.Filesystem.resourcesDirectory は read-only です。

シミュレーターだと書き込みできてしまうため、実機でハマります。

https://wiki.appcelerator.org/display/guides/Filesystem+Access+and+Storage

Ti.Filesystem.resourcesDirectory: A read-only directory where your application resources are located; this directory corresponds to the project/Resources directory in Titanium Studio. The contents of this directory persist until the user uninstalls the application.

applicationDataDirectory とか使えってことですね。

ガイド読んでたら気付きましたが、API リファレンスの方にも書いてありました。