2013年5月29日水曜日

[eclipse]Subversionでのマージの方法

SVNマージの仕方

この手順でばっちりです。

2013年5月24日金曜日

[CakePHP]ブラウザを閉じでもログイン状態を保持する方法

このぺージを参考にさせて頂く。

自動ログイン2

ただし、自分のサイトの場合はもっとシンプルにした。

・passportsテーブルは作らず、Usersテーブルにpassportカラムを追加
 →テーブル作る必要ない。

・有効期限カラムは必要ないと思う。
 →Cookie自体に有効期限があるから、わざわざDBの値とチェックする必要ない。

・__passportDeleteや__passportWriteのメソッドは作らない。
 →Auth->login()やAuth->logout()の直後に書けばよいだけ。

・cookieのチェックはapp_controllerのbeforeFilterにて行う。
 →どのぺージにランディングされてもチェックしてくれるから。


UsersControllerのlogin()アクションあたり。当然この前に、$this->expire(cookieの有効期限)の設定やpassportカラムへSecurity::generateAuthKey()などを使った値の保存はしておく。
ちなみに、上記のサイトだと、「$this->Cookie->write('User', $cookie, true,"+ ".$this->expires);  」となっていたが、"+"があるとうまく動作しなかったのではずした。Cakeのバージョン違いだろうか。

$this->Auth->login($user);
if($this->Auth->_loggedIn){
    $pass = array('Passport'=>$this->Auth->user('passport'));
    $this->Cookie->write('pass', $pass, true,$this->expires);
}


以下のように、もしログインされていなかったら→Cookieにパスポートがあるか確認。
というのをどのぺージでもするように、app_controllerのbeforeFilterで以下をやる。

if(!$this->Auth->_loggedIn){
    $cookiePassport=$this->Cookie->Read('pass');
    if(!empty($cookiePassport)){
        $cookieUser=$this->User->find('first',array('conditions'=>array(
            'User.passport'=>$cookiePassport['Passport']
        )));
        if(!empty($cookieUser)){
            $this->Auth->login($cookieUser);
        }
    }
}

[CakePHP]'Security.cipherSeedには数字を設定しなきゃだめ。

$this->Cookie->write()メソッドを使用した際に以下のエラーが画面に表示された。
Security.cipherSeedにアルファベットが入っていたため。

srand() expects parameter 1 to be long

2013年5月16日木曜日

[AWS]RDSのmult-AZは無料使用枠に収まらない

ということなので、無料で使いたい人は、multi-AZは使用しないようにしましょう。

750 時間の Amazon RDS Single-AZ マイクロ DB インスタンスの使用(MySQL、Oracle BYOL または SQL Server(SQL Server Express Edition を実行中)の実行用) - DB インスタンスを毎月継続的に実行するのに十分な時間

http://aws.amazon.com/jp/free/

また、AWSを使用する人は、価格が従量制であるが故、こまめにAccount Activityで値段を確認したほうがいいです。

2013年5月15日水曜日

[AWS]Route53とoutlook.comで独自ドメインメールを使う

outlook.comでは、google Apps等とは違い、独自ドメインでのメール利用を無料で提供できるので、使用した。
なお、同ドメインのWEBサーバはAWS上に配置しているので、DNSはRoute53を使用することにした。

※事前に独自ドメインを取得して下さい。


基本的には以下サイトに沿って進める。

1.【Google Apps(無償版)難民救済企画】Outlook.comで独自ドメインメールを無料運用してみたよ(Gmailへの転送もOK)

ただし、ムームーDNSの設定は行わずに、Route53で設定を行う。
以下サイトの<メールの設定>のみ行う。他の作業はしなくてよい。
2.Amazon Route53をWindows Live独自ドメイン用のDNSサーバーとして利用する ~基本設定~

この設定が終わったら、1のサイトの「ムームーDNS」設定後の作業から行えば、メールの送信が行えるようになる。

2013年5月8日水曜日

[AWS]CakePHP+Elastic Beanstalk+Route53+ムームードメインで独自ドメインを使用する方法

ムームードメインのDNSサーバを使用することもでるが、AWS内のサービスで完結できるものはしておいたほうが、よさそうなので、Route53を使うことにした。
あと、Route53だとwwwなしの短いURLアクセスできるようにできるとのこと。(ここここ参照)

1.事前作業

・ムームードメインでの独自ドメインの取得
・Elasctic Beanstalkでの環境構築

2.Route53での設定

参考URL1と2に書いてありますが、以下の流れ。

①Hosted Zoneの作成(Create Hosted Zoneボタンから)

②Record Setの作成(以下の2レコードを作成)
  ・www無し(Nameに何も入れない)
  ・www有り(Nameに'www'と入力)
※Alias Targetは対象環境のELBのA Recordを指定

③4つのネームサーバーを控えておく。
  Record SetsのType列が'NS'である行の'Value列'に入った4つのサーバ名

これでRoute53側の作業は終わり

3.ムームードメインでの設定(レジストラのネームサーバー情報を更新する)

①コンパネ→ドメイン操作→ネームサーバ設定変更というように遷移する。

②「取得したドメインで使用する」を選択し、Route53で控えた4つのネームサーバを入力し保存する。

 ※注意点としてRoute53でコピーした段階ではネームサーバ名の最後にドットが付くが、本手順で   入力する際にはそのドットを削除すること。そうじゃないと、エラーとなって保存されない。

   ex aaaa.awsdns-99.net. →  aaa.awsdns-99.net

③ 15分程度待つと、あなたの独自ドメインにwww有りと無しの両方でアクセスできるようになる。

 4.CakePHPの設定

ここからは参考URL5,6,7参照のこと。
 この段階では、www有りと無しの両方のURLでアクセスすることができる。しかし、SEO的にはどちらかに統一したほうがよいとされている。(こことかで

個人的には短いほうがすきなので、www無しに統一する。

ということで、CakePHP内の.htaccessをいじる。

CakePHPのディレクトリ内には.htaccessがたくさんあるが、どれをいじればよいのかは、どうやら環境によって違うようだ。

参考URL7によると、DocumentRootが設定されている値に依存するようだ。

自分の場合は、[cakephpが入るフォルダ]/app/webroot/直下の.htaccessをいじったら、挙動が変化したので、これをいじっていった。 [cakephpが入るフォルダ]直下の.htaccessをいくらいじっても挙動は変わらなかった。
以下が変更後の状態。(当然mydomainやmydomain.jpはあなたのものに置き換えてね)
3~4行目は、URLにwwwがある場合は、 無しにする部分。
5~6行目は、 ElasticBeansTalkにデフォルトで付与されるURLにアクセスされた場合も、独自ドメインのURLに変更するようにした。
この設定の良いところは、本番環境以外では動作しないところ。つまり、本番環境と開発環境で同じソースを使用できる。開発環境では、www有りとか無しとか考えなくていいからね。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$  http://%1/$1 [R=301,L]
    RewriteCond %{HTTP_HOST} ^mydomain\.elasticbeanstalk\.com$ [NC]
    RewriteRule ^(.*)$  http://mydomain.jp/$1 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule> 

<豆知識>
'%1'はどうやら直近のRewriteCondで正規表現パターン(丸括弧でかこまれた部分)にヒットしたものが入るっぽい。
'$1'はおそらくRewriteRuleの一つ目の正規表現パターンにマッチした部分がはいるっぽい。'$2'は二目の正規表現パターンにマッチしたもの。
Apacheって奥深そう!

[参考URL]
1.Using Custom Domains with AWS Elastic Beanstalk
2.How to Create Alias Resource Record Sets
3.営業でも簡単!Route 53の基本設定
4.Elastic Beanstalkで立ち上げたアプリにRoute53経由で独自ドメイン(サブドメイン無し)を割り振る
5.How to make a 301 redirect for incomming requests from non-www to www in CakePHP
6.Generic non-www to www (and vice versa) 301 redirect using .htaccess
7.Redirect www to non-www