middlemanでphpを動作させる(認識させる)方法
今日もハマったぜw
とあるお客さんの既存ウェブサイトのリテイク的な仕事で。
phpを使っているのだが、あまりにソースがひどいんでランディングページ1個作るのでもしんどい。
どうせならhaml+sass環境にしてphpを出力したい!となりまして。
最近、目下はまっているmiddleman先生でphp出力ができないかなぁ?と思って色々いじってみた。
基本的にはindex.php.hamlとかでファイルを作ればいつものmiddleman buildコマンドでちゃんと「index.php」が出力される。
なのでこの辺りは何も問題がない。至って直感的に作業できる。
しかし、いざプレビューしたら「ソースが表示される」(view-sourceしたときと同じ画面)。
せっかくエラーもなくbuildもできているが肝心のプレビューができないとなるとアップするまで動作確認が取れないので、
そいつは困るわけです。たかがランディングページですし。
ということで、middleman上でphpをちゃんと認識させる方法をメモ。
環境:
MacOS:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.10.2
BuildVersion: 14C109
apache:
$ httpd -v
Server version: Apache/2.4.9 (Unix)
Server built: Sep 9 2014 14:48:20
php:
$ php -v
PHP 5.5.14 (cli) (built: Sep 9 2014 19:09:25)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
その他:
- powがインストールしている
設定方法
- pow上でphpを使えるようにする
- middleman上でphpを使えるようにする
の2つを行うことになります。
pow上でphpを使えるようにする
1. 必要なgemをインストールする
rack-legacyとrack-rewriteが必要らしい(そもそもこの参考URLに到達するまでが長かった)
gem install rack-legacy rack-rewrite
2. コードをconfig.ruに書く
参考URLの通り、config.ru内に所定のコードを書く。
require 'rubygems'
require 'middleman/rack'
+ require 'rack'
+ require 'rack-legacy'
+ require 'rack-rewrite'
+
+ INDEXES = ['index.html','index.php', 'index.cgi']
+
+ use Rack::Rewrite do
+ rewrite %r{(.*/$)}, lambda {|match, rack_env|
+ INDEXES.each do |index|
+ if File.exists?(File.join(Dir.getwd, rack_env['PATH_INFO'], index))
+ return rack_env['PATH_INFO'] + index
+ end
+ end
+ rack_env['PATH_INFO']
+ }
+ end
+
+ use Rack::Legacy::Php, Dir.getwd
+ use Rack::Legacy::Cgi, Dir.getwd
+ run Rack::File.new Dir.getwd
run Middleman.server
+が付け足したところ。
middleman上でphpを使えるようにする
1. Gemfileにmiddleman-phpをbundleできるように書く
Gemfile
+ gem "middleman-php"
これなんですが普通にgem install middleman-phpとやるのと一緒です。
お好きな方で。
(一応アプリケーション内のことなのでGemfileに書きました)
2. config.rbにphpをactivateするように設定する
config.rb
+ configure :development do
+ activate :php
+ end
一番最後に3行追加で。
ここらへんの設定はmiddleman-phpを参考に。
気をつけるのは「config.rb」の方に書くこと。config.ruではない点に注意。