開発環境の構築2(nginx+PHP(FastCGI)+Laravel)
アプリケーションの類いを入れる
とりあえずPHPの動くwebサーバー立てようぜ!という感じ
気分的にnginx+PHP(FastCGI)+Laravelが動くまで
nginx
どうせアクセス来ないしapacheでもいいんだけど、手元にある本がnginxのみなのでこちらに
相変わらずapt-getで最新が取れないようなので
http://wiki.nginx.org/Install
$ sudo -s # nginx=stable # use nginx=development for latest development version # add-apt-repository ppa:nginx/$nginx # apt-get update # apt-get install nginx # nginx -v nginx version: nginx/1.4.7
にあるままに実行
MySQL
$ sudo apt-get install mysql-server mysql-client -y $ sudo mysql_secure_installation
mysql_secure_installationなんて物があるんですね。最低限の設定でしょうけど。
5.5.35が入った
文字コードくらいは先に設定した方がよさげ(追記)
$ sudo vim /etc/mysql/my.cnf [mysqld] character-set-server=utf8 skip-character-set-client-handshake
PHP
nginxとPHPを一緒に使うのは初めてだけど、fpmってのを入れれば良いのかしら?
$ sudo apt-get install php5-fpm php5-cli php5-mysql php5-json php5-curl php5mcrypt php5-memcached -y
5.5.3が入った模様
php5-json php5-curl php5mcryptは入れようかなーと考えているlaravelで必要
php5-memcachedをキャッシュとして使用予定
laravel
確定ではないけどフレームワークとしてlaravelを入れてみる
Laravel - The PHP framework for web artisans.
$ wget http://laravel.com/laravel.phar $ sudo mv laravel.phar /usr/local/bin/laravel $ sudo chmod 755 /usr/local/bin/laravel
適当なディレクトリで
$ laravel new hoge $ cd hoge $ chmod 777 -R app/storage $ vi app/config/app.php localとかtimezonの設定
nginx設定 for laravel
/etc/nginx/conf.d/に入れればいいのか?
$ vim hoge.conf 1 server { 2 listen 80; 3 server_name doujin-ongaku.jp; 4 5 access_log /var/log/nginx/doujin-map.access.log; 6 error_log /var/log/nginx/doujin-map.error.log; 7 8 root /var/www/hoge/public; 9 10 location / { 11 index index.php; 12 try_files $uri $uri/ /index.php?$query_string; 13 } 14 15 location ~ \.php$ { 16 fastcgi_pass unix:/var/run/php5-fpm.sock; 17 fastcgi_index index.php; 18 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 19 include /etc/nginx/fastcgi_params; 20 } 21 }
fastcgi_passの項目は「127.0.0.1:9000」になってる情報もあったけど、
/etc/php5/fpm/pool.d/www.conf の listen の設定次第の模様
どっちがいいか、みたいのもあるっぽいけどとりあえず動く方で
(よく分からない設定を変えたくないだけ)
動作
hostsを設定してドメインに飛んでみると…
「Mcrypt PHP extension required.」
入れたやん!さっき入れたやん!
$ php -m [PHP Modules] ... iconv json libxml mbstring mhash mysql mysqli ...
無い・・・?
解決方法↓
Can't use PHP extension Mcrypt in Ubuntu 13.10 (Nginx, PHP-FPM) - Ask Ubuntu
Ubuntu13.10だと起きる感じっぽい
$ sudo ln -s /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/mcrypt.ini $ sudo php5enmod mcrypt $ sudo service php5-fpm restart
arrived!!
開発環境の構築
MAP用ではなく自分でなんでもいじる用の開発環境を作ります
すでにさくらのVPSがそんな用途なんですが、スペック過多感がすごいので次の契約は継続しない方針で…。
そもそも仕事でも使う必要があったせいで、お金を払う価値はあった物のごちゃごちゃしすぎてしまったのも原因
まあでもVPSがいいよね
AngularJsでController実行前に処理する方法
AngularJsでrouteProvideで処理を分けているけど、ログインチェックとかを共通でController実行前にしたいなぁと思いつついまいち情報がなかったのでメモ
resolveと$q 使って処理すればいけそうな感じで
http://stackoverflow.com/questions/18010796/return-interdependent-async-promises-in-routeprovider-resolve
http://stackoverflow.com/questions/17731942/how-to-load-data-synchronously-in-angularjs-application
これつかっていけたぜヒャッホウと思ったら、リロードでうまく動かないことがあったので(勘違いもあったかも)
http://stackoverflow.com/questions/16286605/initialize-angularjs-service-with-asynchronous-data#16754186
こちらの方法でうまくいった。
app.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/', { templateUrl: 'partial/index.html', controller: 'IndexCtrl', resolve: { user: function($q, loginCheck){ var d = $q.defer(); loginCheck(d); return d.promise; } } }). otherwise({ redirectTo: '/' }); }]); app.factory('loginCheck', ['$q','$http', '$rootScope', function($q, $http, $rootScope) { return function(d) { $http({ method: 'POST', url: '/user', }). success(function(data, status, headers, config) { $rootScope.hoge = data; d.resolve(data); }). error(function(data, status, headers, config) { d.reject(status); } }); return d.promiss; // ここは怪しい } }]); app.controller('IndexCtrl', ['$scope', '$rootScope', 'user', function($scope, $rootScope, user) { console.log(user); console.log($rootScope.hoge); } ]);
ちょっと書き換えたりしているのでもしかしたら動かないかも
そもそもfactoryとかserviceとかいろいろあってよくわかってないのです。