2014年6月28日土曜日

Macbook Airで、aliasを設定する

前回、CentOSのaliasを調べたので、

Macbook Airのターミナルに適用したいと思います。

~/.bash_profile
に以下を記述します。

if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi


~/.bashrc
に、以下を記述します。

alias l.='ls -d .*'
alias ll='ls -l'
alias ls='ls'
alias vi=‘vim'

2014年6月27日金曜日

CentOSのalias設定


CentOSに、vagrantアカウントでログイン後には、
$ ll
コマンドで、
$ ls -l
と同じことができるようになっている。
ほとんど癖で使っていたが、Macbook Airのターミナルでは
$ ll
は使えなかったので、設定しようと思うのですが、
CentOSの方でどのようになっているかを調べてみます。

CentOSでは、aliasが設定されているので、
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’

と表示されました。
なので、こちらを参考にし、
http://www.atmarkit.co.jp/ait/articles/0203/12/news001_2.html

/etc/profile
を見てみます。

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" ]]>/dev/null 2>&1
        fi
    fi
done
と書いてあります。
/etc/profile.d/*.sh
で.shを全て読んでいるようです。

$ ls /etc/profile.d/
colorls.csh  glib2.csh  hphp.sh   lang.sh   less.sh  vim.sh
colorls.sh   glib2.sh   lang.csh  less.csh  vim.csh  which2.sh

colorls.sh
を開いてみると
いろいろと記載がありますが、最後に
alias ll='ls -l --color=auto' 2]]/dev/null
alias l.='ls -d .* --color=auto' 2]]/dev/null
alias ls='ls --color=auto' 2]]/dev/null
とありました。

vim.sh
には、
  alias vi >/dev/null 2>&1 || alias vi=vim
とあります。
そして、
which2.sh
には、
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’
です。

一応、全てのaliasが設定されていることがわかりました。

2014年6月25日水曜日

cakephp(hhvm+nginx+mysql)のUnit Test

続いて、
unit testの環境を作ります。

CakePHPのUnit Testは、test.phpで実施できますので、
http://192.168.33.10/test.php
を指定します。


PHPUnit is not installed!

と出ます。

hhvmでは、phpをいれなくてもよいので、pearもいらないだろうと思うので、
pearは入れずに、phpunitを入れようと思います。

composerを使ってインストールします。

こちらを参考にしてダウンロードします。
https://github.com/facebook/hhvm/wiki/OSS-PHP-Frameworks-Unit-Testing:-General
https://github.com/facebook/hhvm/wiki/OSS-PHP-Frameworks-Unit-Testing:-CakePHP

$ cd /usr/share/nginx/html/cake_2_5

$ wget https://getcomposer.org/download/1.0.0-alpha8/composer.phar

$ vi composer.json

{
  "config": {
    "vendor-dir": "vendors"
  },
  "require-dev": {
    "phpunit/phpunit": "3.7.*"
  }   
}


そして、インストール。
$ hhvm composer.phar install --dev

次のようなエラーがでることがあります。

SlowTimer [5007ms] at curl: https://packagist.org/p/provider-archived$4f097d431ccbfed3a6c36a172a662645d227ec94d074b7a9484490726c4c5500.json

The "https://packagist.org/packages.json" file could not be downloaded: Failed to open
   https://packagist.org/packages.json (Resolving timed out after 5000 milliseconds)   

などのメッセージが出てました。

タイムアウトっぽいです。
以下のサイトを参照。
https://blog.engineyard.com/2014/hhvm-hack-part-2

$ hhvm -v ResourceLimit.SocketDefaultTimeout=30 -v Http.SlowQueryThreshold=30000 -v Eval.Jit=false composer.phar install --dev

として、なんとかなりそうです。


phpunitが入ったかを確認します。

http://192.168.33.10/test.php

すると、
何も表示されなくなりました。
真っ白です。

一応、PHP Unitはインストールされたとみて良さそうです。


cake_2_5/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php
を調べてみて、
100行目あたりにある
ob_get_clean();
これをコメントアウトして、実施すると、
test.phpが思ったようなTest Casesが出るようになりました。

どうやら
ob_get_clean();
がphpと動きが違うような気がします。
とりあえずは、OKで。
この辺はできれば追って調べることにします。

2014年6月12日木曜日

CakePHP Error: The requested address


http://192.168.33.10/へアクセスすると

Error: The requested address '/' was not found on this server.

とエラーが出て、はまってしまったので、記録に残します。

app/Config/core.php

34行あたりのDebug Levelを0にしていたために
出るようになったようです。

いろいろと試していて、Debug Levelを変えてしまったのですが、
http://192.168.33.10/posts/
へのアクセスではエラーがでていなかったため、なんの影響かがわからずに
はまってしまいました。

Debug Levelを1または2にするとエラーはでなくなります。

本番用としてDebug Levelを0にした場合には、あまり見せれないページですので、
そのまま、Not Foundが返るようにしておくとよいですが、
必要であれば、app/View/Pages/home.ctpを編集するとよいです。

2014年6月11日水曜日

MacBook Airでの、HomeやEndキーの扱い

WindowsのPCを使っていた頃は、よく「Home」キーや「End」キーで
文章の行頭や行末への移動にに使っていましたが、
MacBook Airを使ってそのキーがなく、不便に思っていました。

WindowsPCでは、fn+矢印キーでHome,End,PageUp,PageDownが出来るメーカーの
キーボードがありましたが、よく使うキーなので
あえてHome,End,PageUp,PageDownが独立したキーを持ったThinkpadを使っていたものです。

そこで思いつきました。
Macでもfn+矢印キーで同じようにHome,End,PageUp,PageDownに当たるのではないかと。

やってみました。

”ほぼ”思った通りでしたが、多少動きが違いました。
エディタ「Sublime Text」で使うと概ねできていましたが、
Evernoteだと”行”での先頭、末尾ではなく、ノート全体の先頭と末尾という感じです。
WinPCでのCtrl+Home,Ctrl+Endみたいな感じでした。
ブラウザ上だとまた動きが違いますので、完全な代替キーとはならないです。

今更ながらGoogleで「mac home end キー」とキーワードを入れて検索してみると
誰もが同じように考えているようでいろいろと出てきましたが、
以下のアップルサポートにあるように、fnキーよりは、Commandキーが対応しているようです。
http://support.apple.com/kb/PH13725?viewlocale=ja_JP

改めて、Command+矢印キーでやってみると、Commandキーのほうが”正しい”動きをしている感じです。
ブラウザのURL入力欄や、検索用Input欄も先頭と末尾へ移動できます。

2014年6月6日金曜日

cakephpのアプリとhtmlを分離する

Cookbookには、応用インストールとして
http://book.cakephp.org/2.0/ja/installation/advanced-installation.html#cakephp
「複数のアプリケーションでCakePHPを共有する」というのがあります。

エンジニアとデザイナが分散開発したいときに同じファイルを編集してしまい、
デグレードするということもありますので、うまく開発したいところです。
そのためにはソース管理から分けてしまうというのは、ひとつの手だと思いますので、
これを試して、CakePHPのコアライブラリと、phpアプリ部分と、静的なhtml(js,css)を分離したいと思います。


以下が手順です。(sudoが必要な場合もを省略して書いています。)

やりたいこととして、
  •  CakePHPのコアライブラリを/usr/lib/Cakeに置きます。
  •  appを/usr/share/nginx/scriptに置きます。
  •  webrootを/usr/share/nginx/htmlに置きます。

※前提として、この記事の環境までができているところからになります。

$ cd /usr/share/nginx/html/cake_2_5

まずは、コアライブラリを複数のアプリケーションで使えるようなところへ移動します。

$ mv cake_2_5/lib/Cake /usr/lib/

次は、アプリケーションのwebroot(静的なページ)をドキュメントルートにします。
$ mv cake_2_5/app/webroot /usr/share/nginx/html/

/etc/nginx/conf.d/default.confを編集
location / と location ~ \.php$ の2箇所のrootを次のようにします。
root  /usr/share/nginx/html/webroot;

confを編集したので、再起動します。
$ service nginx restart

(php)アプリケーション部分を移動します。

$ mv cake_2_5/app /usr/share/nginx/script/

最後に、CakePHPの定数を編集します。
/usr/share/nginx/html/webroot/index.phpを編集します。
編集する定数は、 ROOT 、 APP_DIR 、 CAKE_CORE_INCLUDE_PATH です。

それぞれ以下のようにします。
39行目付近     define('ROOT', DS . 'usr' . DS . 'share' . DS . 'nginx' . DS . 'script');
47行目付近     define('APP_DIR', 'app');
64行目付近     define('CAKE_CORE_INCLUDE_PATH', DS . 'usr' . DS . 'lib');

以上で、設定はできましたので、
ホストPCからブラウザで、http://192.168.33.10/へアクセスすると
CakePHPのデフォルトのページが出るようになります。
もちろん、http://192.168.33.10/postsへアクセスすれば、
ブログチュートリアルで作成したページヘアクセスできます。

2014年6月5日木曜日

failed (13: Permission denied) while reading upstream

nginxの設定ファイルnginx.confにuserという項目があります。
nginxのworker processというプロセスの実行ユーザを指定することができますが、
これを、apacheやwww-dataなどに変更する場合、
サイトが"応答なし"となったりしました。

ログファイル /var/log/nginx/error.log を確認すると

"/var/cache/nginx/fastcgi_temp/1/00/0000000001" failed (13: Permission denied) while reading upstream,

といったメッセージが出力されています。


/var/cache/nginx/fastcgi_temp
以下のディレクトリやファイルが、nginx.confで先に指定していたuserで
作成されているため、変更後のuserでは、Permission deniedということです。

変更後のuserがnginxの場合、

$ sudo chown -R nginx. /var/cache/nginx/fastcgi_temp/*

を実行して、アクセスできるようにします。

nginx, hhvmでcakephpを動かす その2

MySQLデータベースも準備出来たとして、(他の記事を参照)
以前に作成しているブログチュートリアルのcakephpのphpファイルをコピーして、

http://192.168.33.10/posts

とすると

404 Not Found

と出ます。

http://book.cakephp.org/2.0/ja/installation/url-rewriting.html#nginxurl
このCakePHPのCookbookにもあるように、nginxでの設定が載っています。

/etc/nginx/conf.d/default.confを編集します。
location / {}の欄に

    try_files $uri $uri/ /index.php?$uri&$args;

を追記します。


nginxをrestartして、

http://192.168.33.10/posts

を確認すると、postsコントローラが生きて、postsのデータが表示されるようになりました。

2014年6月4日水曜日

tmpディレクトリの書き込み権限



CakePHPにおいて、app/tmpディレクトリはWebサーバからの書き込みが

出来るようにしておく必要があるので、webサーバの実行ユーザを知るために、

whoami.phpファイルを作成して、以下を記述します。

<?php echo exec('whoami');?>

そして、ブラウザでアクセスすると

root

と表示されました。
apacheで構築した時は、ユーザはapacheだったので、今回の場合だと、ユーザはnginxになると思いましたが違いました。
apache+phpのときとは異なるようで、
さすがにrootで実行するのはよろしくないだろうと思いましたので、
HHVM-FastCGIの実行を、rootで実行していたのを、
適切なユーザで実行するようにします。

今回は、デフォルトユーザの、vagrantユーザで実行しますので、
$ hhvm -m server -vServer.Type=fastcgi -vServer.Port=9000
として、再度、whoami.phpを確認すると、

vagrant

と表示されました。

そうすると、今度は、CakePHPのサイト表示において、
Permission denied
Not a valid stream resource
_cake_model_ cache was unable to write ...
といったWarningが出ます。
CakePHPのapp/tmp/Cache内のファイルがrootで作成されているため、
変更したvagrantユーザでは扱えないといったメッセージです。

ですので、、CakePHPのapp/tmpディレクトリを、
$ sudo chown -R vagrant. app/tmp
として、vagrantで書き込みできるようにします。

nginx, hhvmでcakephpを動かす

cakephpをhhvm+nginx上で動かすように試みます。
(これまでの構築の続きなので前の記事の環境が前提となります。)

/usr/share/nginx/htmlにcakephpを配置します。

CakePHP-2.5.1を持ってきました。
/usr/share/nginx/html/cake_2_5
とします。

nginxの/etc/nginx/conf.d/default.confを編集します。

cakeのドキュメントルートは、app/webroot/になるので、以下のように変更します。

location / {
    root    /usr/share/nginx/html/cake_2_5/app/webroot;
    index  index.php index.html index.htm;
}

location ~ \.php$ {
    root           /usr/share/nginx/html/cake_2_5/app/webroot;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

今回、fastcgi_paramのところでは、$document_rootと変更しています。

これで、nginxのサービスを再起動しまして、
ホストPCからブラウザでアクセスします。
http://192.168.33.10/

CakePHPの既定のページが表示されるようになりました。

2014年6月2日月曜日

HHVM+nginxでphpを動かす

nginxのweb serverが立ち上がりましたので、
hhvmで、FastCGIモードでサービスを立ち上げます。

$ hhvm -m server -vServer.Type=fastcgi -vServer.Port=9000
※訂正:sudoで実行していましたが、適切なユーザで実行してください。

次に、nginxにfastcgiを設定します。
$ sudo vi /etc/nginx/conf.d/default.conf
を編集します。

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
の下にある
location ~\.php$ {}のところのコメントを外し、
半ばのfastcgi_paramの設定で、
/scriptを実際にphpファイルを置く場所に変更します。
とりあえず、今回はhtmlと同じドキュメントルートにして、
/usr/share/nginx/html
とします。

サービスを再起動します。
$ sudo service nginx restart

phpのテストファイルを作成して、先ほどの
ドキュメントルートに置きます。

ホストPCからブラウザでアクセスします。
http://192.168.33.10/test.php

これで一応nginx+hhvmでPHPが実現できました。

URLにindex.phpを指定せずに読めるようにするための設定が
抜けていました。

先ほどの/etc/nginx/conf.d/default.confを編集します。

location / {}のところのindexの設定に、"index.php"を追加します。
左にある方が優先されるようなので、すでにあるindex.htmlより左に追記します。

あとは、サービスをreloadします。