cakePHP プラグイン内でモデルを使う

プラグインを追加して、プラグインのコントローラーから、プラグインではないモデルにアクセスする方法がよく分からない。
というか、User認証に関するロジックをプラグイン化しつつ、モデルは既存のUserモデルを使おうとするときに、プラグインのユーザ登録画面で、Userモデルに記載しているバリデーションがなぜか中途半端に機能しない。notemptyは機能するが、それ以外のvalidationロジックがまったくきかない。なぜだ??確かにプラグインの各種連動の仕組みをしっかり分かっていない。だから変なことになっているのかもしれない。

プラグイン内のコントローラー名は、UserControllerにしていたのだが、これだとどうもうまくいかないらしい。
HogeUserControllerにして、public $uses = array(‘User);としつつ、$this->User->save($this->request->data)とするとうまくバリデーションが効いた。中途半端に効くというのは一番困るわー。

cakePHP2.3 多言語化

app/Consoleに移動して、下記を起動する

E押したら翻訳ファイルみたいのを作ってくれる。詳細は、ここ。わかりやすい。

/app/Locale/jpn/LC_MESSAGES/default.poに出力したファイルをコピーする。僕の場合は、/app/Locale内にdefault.potというファイルが出来たので、それを上記パスにdefault.poとしてコピーした。potをpoにするのが重要でありんす。そのpoファイルに英語に対応する日本語をせこせこ記述すると、日本語訳してくれるようになった。

AppControllerとかで、beforefilterに下記のように書くと環境に関わらず強制的に言語を変更できる。日本の場合は、ja。

githubにpushするとcapistranoと連動して自動デプロイする

githubにはPost-Receive Hooksという機能があり、これはpushされると、登録したurlにpostアクセスし、json形式でpushしたデータの内容を渡してくれる。なので、このgithubからのpostアクセスを受け付けて、pushデータ内容に応じて、capistranoのサーバにアクセスしcapistranoでデプロイをするようにすれば、pushからの自動デプロイが可能になる。

PHPでGitHubからのpostアクセスの受けをつくる

今回はcapistranoと同じサーバにGitHubのpostアクセスの受けをつくった。ちなみにさくらのvpsサーバ。
apacheの設定をしてgithubから受けられるようにする。受けのphpは下記のような感じにした。

githubから来てるものに限定するとかするともっとよい。あと、ブランチに応じて、開発サーバデプロイと、本番サーバデプロイを分けるとかできる。まあでも本番デプロイは手動でもいいか。さくらvpsだとapacheのドキュメントルートは/var/www/htmlでして、そこに上記phpファイルを置いております。chdirはつまり/var/www/cap/hogeに移動しており、hoge上にcapistranoフォルダを作っており、そこでcap dev deployをしております。githubのpostアクセスを受けているのはapacheですので、cap dev deployしているのもapacheになります。なので、apache君のssh pubkeyを作ったりしました。あとデプロイサーバのssh pubkeyもgithubに登録しました。僕のcapistranoはどこかで調べてconfig/deploy.rb以外に、config/deploy/dev.rbというのもありますので、それぞれ下記のような内容にしました。ちなみにデプロイサーバもサクラのレンタルサーバです。

config/deploy.rb

config/deploy/dev.rb

参考
Webサイトをgithubで管理してpush時に自動的に同期する方法
GitHubとJenkins連動 自動デプロイ 開発環境設定編
githubにPushしたらwebhooksとSinatraを利用してサイトを自動的に更新する
GithubにあるプライベートリポジトリをCapistranoでデプロイ

sshで接続してるときに短時間でタイムアウトにならないようにする

sshでサーバに接続してるときに非常にイライラさせられるので、調べた。

参考:ssh 接続をタイムアウトしないようにする

設定は、クライアント側・サーバ側のどちらかのみすればよいとのこと。
とりえあずサーバ側を設定してみる。

vim /etc/ssh/sshd_config

sshd_configに、下記を追加してみた。

どうもできてるっぽい。と思ったらできていない!

参考:NATな環境で放置したSSH接続が切断される問題について

よくわからないが、とりあえず解決したいので次に、クライアント側の設定もしてみる。
できてる。

capistranoのバージョン戻す

capistrano3.0.0以降は結構色々変わるらしく、勉強工数が必要なのと、今まで全く問題なかったのでバージョン戻してみることにした。3.0.1にアップデートしたらエラーだらけになったので。

これで、エラーなくなった。

YouTube API

cakePHPのviewでYouTubeAPIを初めて使った。divのid=”videoDiv”内に動画が自動で再生される。閲覧中断していた動画は中断したところから再生される。閲覧中断ボタンと、閲覧完了ボタンに対応している。といったようなことをした。

tmuxをmacで使う

tmuxを教えてもらった。
ターミナルが1つのタブで沢山の画面が使えるようになって、しかも沢山の画面全ての状態を保存しておいてくれる。

macにインストールするには、
brew install tmux
とやる。

結構インストールに時間かかる。
終わったと思ったらエラーがでている。

sudoとかでbrew link tmuxとやってもできない。
/usr/localの所有者を自分に変更したらできた。
(sudo chown ore:ore /usr/local)

Capistranoでssh接続

ssh接続する場合、下記のように設定できる。

Tailコマンド

超便利なコマンド知った。

tailコマンド

cakePHPのerror.logとか毎回開くのめんどくさい。サーバのエラーログも。
tailコマンドは、ファイルの最新状態を監視して、新しいところを指定行数分リアルタイムに表示してくれるコマンド。

といった感じで使う。

-fがリアルタイムにするオプションらしい。

XserverにcakePHP置くのが難しかった

4時間くらいかかってしまった。
久しぶりにブログ書く。でも細かくかきたくない。

public_htmlの.htaccessの中身がよろしくなかった。
PHPのバージョンは5.4にしているのだが、

AddHandler x-httpd-php5.4 .php .phps
これの.4が抜けていて、真っ白状態が続いていた。
.4つけたら、すっかり問題なく動いた。

cakePHP FileBinderで画像リサイズ

モデルでこうやってやると、画像登録前にresize_image関数を呼出す。resize_image関数には、引数として画像ファイルが渡される。

PHP 画像の縮小(リサイズ)

twitter bootstrapの吹き出し

参考:http://getbootstrap.com/2.3.2/javascript.html#popovers

静的に吹き出しを使いたい場合は、下記のような感じでやります。