前回、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で。
この辺はできれば追って調べることにします。
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欄も先頭と末尾へ移動できます。
文章の行頭や行末への移動にに使っていましたが、
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が必要な場合もを省略して書いています。)
やりたいこととして、
※前提として、この記事の環境までができているところからになります。
$ 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を次のようにします。
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へアクセスすれば、
ブログチュートリアルで作成したページヘアクセスできます。
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の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のデータが表示されるようになりました。
以前に作成しているブログチュートリアルの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といったWarningが出ます。
Not a valid stream resource
_cake_model_ cache was unable to write ...
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/になるので、以下のように変更します。
今回、fastcgi_paramのところでは、$document_rootと変更しています。
これで、nginxのサービスを再起動しまして、
ホストPCからブラウザでアクセスします。
http://192.168.33.10/
CakePHPの既定のページが表示されるようになりました。
(これまでの構築の続きなので前の記事の環境が前提となります。)
/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します。
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します。
登録:
投稿 (Atom)