會寫這篇是前一陣子 HHVM 突然又被大家撈起來討論,看起來應該是有啥新進化吧 XD 那時身為專業的阿宅,一定要馬上裝來玩一下。
隨著時間的流逝,又有人發現用 HHVM 可以讓 Composer 跑更快一點(超自然啊!) 我又再次回想起這神奇的東西⋯⋯ 現實是 Composer 跑太慢被 HHVM 斷開魂結
當時我就想,既然我都搞了 Phalcon on Heroku 這東西,不如再來搞一個 HHVM 版本吧!
沒想到官方竟然無情的已經做好了,於是我只好轉戰 Laravel 然後冒險就這樣開始了(才沒有 XD
PaaS 入門指南還沒斷,不過人生總是需要調味一下,就先讓我寫些別的吧 XD
其實這有雷,但是沒有被雷打過(原來不是地雷)怎麼知道什麼叫做「痲痹」的感覺呢? 所以,請大家跟我一起來「被雷劈~」一下吧! 好吧,你要跳過我不介意,不過不要恨我把前置動作寫在過程喔(揪咪
初始化 Laravel 專案
根據官方公佈的新手預置技能使用指南只要執行以下動作即可。
composer create-project laravel/laravel your-project-name –prefer-dist
註1: your-project-name 就是專案名稱,應該不會有人打錯吧 XD 註2: 沒用過 composer 嗎?這裡不是新手區,趕快去學這個技能吧!
生成 Heroku 力場
git init
這是基礎技能,可以參考一下 PaaS 入門指南(二)的相關說明
Heroku create –buildpack https://Github.com/hhvm/heroku-buildpack-hhvm
註:如果不希望 APP 名稱是隨機的,可以在 create
後面加上名稱喔~
最後使用黑暗魔法 - HHVM 設定檔! 適用于 Heroku 的版本如下:
Server {
SourceRoot = /app/public/
}
VirtualHost {
* {
Pattern = .*
RewriteRules {
* {
pattern = .?
# app bootstrap
to = index.PHP
# append the original query string
qsa = true
}
}
}
}
StaticFile {
Extensions {
CSS = text/css
gif = image/gif
html = text/html
jpe = image/jpeg
jpeg = image/jpeg
jpg = image/jpeg
png = image/png
tif = image/tiff
tiff = image/tiff
txt = text/plain
}
}
其實就是刪掉 Port
設定,因為 Heroku 會幫你指定這樣。
註:Extensions 可以自行追加,其實他有少一些項目 XD
自爆吧!
git push Heroku master
沒錯,現在你會看到網站順利地跑起來了! 哪裡有雷?給我出來面對!
看清楚你的 Terminal 啊!是不是 post-
或者 pre-
這類跑完 composer install
該跑的 Script 都死了⋯⋯
「因為找不到 PHP」
不過,即使你改為 hhvm artisan
也是不會動的噢~
不然怎麼會是雷,而且這樣其實本機跑也很不方便啊!
黑魔法!
現在,打開 composer.json
然後把 PHP
改為 $_
就對了!
如下所示:
1{
2 "name": "laravel/laravel",
3 "description": "The Laravel Framework.",
4 "keywords": ["framework", "laravel"],
5 "license": "MIT",
6 "require": {
7 "laravel/framework": "4.1.*"
8 },
9 "autoload": {
10 "classmap": [
11 "app/commands",
12 "app/controllers",
13 "app/models",
14 "app/database/migrations",
15 "app/database/seeds",
16 "app/tests/TestCase.PHP"
17 ]
18 },
19 "scripts": {
20 "post-install-cmd": [
21 "$_ artisan clear-compiled",
22 "$_ artisan optimize"
23 ],
24 "post-update-cmd": [
25 "$_ artisan clear-compiled",
26 "$_ artisan optimize"
27 ],
28 "post-create-project-cmd": [
29 "$_ artisan key:generate"
30 ]
31 },
32 "config": {
33 "preferred-install": "dist"
34 },
35 "minimum-stability": "stable"
36}
git push Heroku master
當你再次 push 上去時,一切就正常了!世界再次回歸秩序啊!!!
註:本機建議在 ~/.bashrc
之類的補上 alias composer="PHP /bin/usr/local/composer"
之類的,不然本機會跑失敗喔!
所以,到底發生了什麼?
原來這個問題只要是 Heroku 的 PHP Buildpack 都會碰到,然後就有歪國人西方高人找到了方法
沒錯,就是 $_
這個魔法般的祕技⋯⋯
那麼,鏡頭轉到 bash
的說明書上:
https://www.gnu.org/software/bash/manual/bashref.html
When Bash invokes an external command, the variable ‘$_’ is set to the full path name of the command and passed to that command in its environment.)
簡單來說 $_
基本上跟 $!
算是好兄弟之類的,效果都是「上一次執行的 XXX」這樣的感覺。
$_
是「上一次執行的指令」然後在這個運用中,就很神奇的可以取得 HHVM 的執行指令(超神奇的!)然後就順利地將 Composer 的 Script 都跑起來了!
喔耶,總之就這樣寫完了 XD
因為上課時間關係,週二更新不方便,以後應該是週日或者週一更新網誌喔~ (不過我可能偷懶,還是訂閱 RSS 比較方便 XD)