nodejs hosting service - openshift

從 nodejs 的 github wiki 上可以找到一個頁面為 Node hosting 上面有相當多的服務可以選擇使用,著要是測試用機器,所以幾個重點條件就是:

1. deploy 後立馬可以使用
2. 可以跑 nodejs 並且支援 0.8+ 的版本
3. 使用 Git 做版本控管
4. 免費(超重要)

基於以上條件目前使用過兩個服務:
1. heroku
2. openshift

這次先來介紹 openshift,oepnshift 是頂頂大名的 redhat 提供的服務,這次使用的是 openshift online,產品定位為 Public Paas,有支援語言:Nodejs 0.6+, 0.10+, JAVA, PHP, Python, Ruby, Perl, GO (註1),或是可以直接在上面架設 Jenkins, Drupal, Wordpress 可直接開啟不需要自行 deploy。 openshift 官方還有寫了一套 Command-line client 工具來對 deploy 上去的 app 坐操作,關閉、啟動、重起、目前的 log 等,詳細可至官方查詢。

當然最重要的 openshift 符合我們所有的條件,並且免費的 Gear(instance) 可以開三台,如官網價錢:
Size MemMemory Storage Recommended for Cost
Small 512 MB
1-6GB
1GB
expandable

PHP, Perl, Python, Ruby, Node.js, MySQL $0.04/hour
after the first 3
Medium 1GB
1-6GB
1GB
expandable

Java, MongoDB, PostgreSQL $0.10/hour
Medium (with JBoss EAP 6)
Java EE6 Full Profile
1GB
1-6GB
1GB
expandable

JBoss EAP $0.13/hour




這麼佛心看到只能馬上跪下說聲「謝主龍恩」不然也不知道該怎麼辦,目前使用上除了 deploy 速度很慢(相較起 heroku),web 介面非常醜並且不人性化,常常找不到資料,官方文件看不太懂以外,其實還蠻不錯的,畢竟是要免費的測試機還是別太苛求。

目前就一點特別需要注意,deploy 上去後 port 與 root url 設定上與一般不太相同,必須修改如下:
port 必須設定為「process.env.OPENSHIFT_NODEJS_PORT」
root url 必須設定為「process.env.OPENSHIFT_NODEJS_IP」

以 sails 為例,local.js 必須修改如下


註1. 除了nodejs 外其他語言支援版本可至官方開發者中心查詢

相關連結
nodejs
github wiki
Node hosting
heroku
openshift
openshift developer center
openshift Command-line client
openshift pricing
sailsjs

node-hipchat

Hipchat 是一套相當好用的 Log system,還可以與 Github, Bitbucket, jenkins......等服務整合,團隊中打屁的同時還可以看到系統狀況,因為 Hipchat 官方給 nodejs 的不知道在寫啥鬼,所以就自己寫了一個簡單的版本。

使用起來相當簡單,詳細可以參考如下,完成後就會看到你的 room 中噴出兩筆 log

var hipchat = require('./lib/hipchat');

// log warn
hipchat.logger('Hello hipchat logger - warn', 'warn');

// log error
hipchat.logger('Hello hipchat logger - error', 'error');

這麼好用的東西當然要立馬 clone
git clone git@github.com:IskenHuang/node-hipchat.git


相關連結
Hipchat
IskenHuang/node-hipchat

gitst embed one file

Gist 是個放置少量的 code 或 blog 很好用的東西,但有時候可能是一個 Gist 內放了很多的檔案,這時如果複製貼上「<script src="https://gist.github.com/IskenHuang/b5bb5bc9b56a15452d6e.js"></script>」就會發生一次把所有的檔案都嵌入,但這中間可能需要嵌入一寫字來說明每個檔案間的關係就變很麻煩。

這時候只需要複製原本的連結再加上「?file=FILE_NAME」就可以只貼上一個檔案,範例如下:

<script src="https://gist.github.com/IskenHuang/b5bb5bc9b56a15452d6e.js?file=structure.md"></script>

切記,檔案名稱大小寫必須與 Gist 上面相同,不然無法正常使用

想關連結
Gist

sailsjs differentiate api and view controller

Sails 是一套我相當喜歡的 Node.js web framework,底層仍然是使用 Express.js,另外整合了很多常用的 web 套件:grunt, socket.io, RESTful API, ......等。

由於 sails 的架構與 codeigniter 相當類似,Controller 對應到 View,並且對應到 route,在 config 中有個 controller.js 還可以對所有的 controller 做設定,如自動產生 restful api 等,以及這次的重點「prefix」,prefix 設定後在 route 上就會自動改變如下

使用 prefix 前
http://localhost/CONTROLLER_NAME/ACTION_NAME

使用 prefix 後( prefix 設定為 '/api/')
http://localhost/api/CONTROLLER_NAME/ACTION_NAME

如果只是要做 api server 相信這會是個很棒的設計,還可以作為 api 的版本區分(例如「/api/v1/」),但要做「網站」在 view 與 api 之間就必須做些區分,以下的作法就是將 view 與 api 切開,view 統一由 ViewController 控制,其他的 api 交由一般的 controller 控制,從 route 看起來如下
// ViewController
// Get user or user's view
http://localhost/user

// UserController
// Get user '1' api
http://localhost/api/user/1

資料夾目錄如下


接下來開始實作把 api 與 view 切開
首先是設定好 api 的 prefix,修改 「/config/controllers.js」


再來是設定 route 把 view 改為 '/',修改「/config/routes.js」
routes.js


最後是產生 ViewController,在 terminal 輸入
sails generate controller view

並修改 「/api/controllers/ViewController.js」



ps. 或許也可以直接做 single page design,但某些狀況下透過 controller 可以從 server side 將其他訊息一併回給前端

完整的 code 可至 Gist 查看

相關連結
Sails
Node.js
grunt
socket.io
Express.js
codeigniter

iOS restore and upgrade

相信很多人都有升級 iOS7,並且在 beta 測試時就搶先使用幫助 apple 來 debug,這種就甘心的情操實在很偉大,但是使用了 beta 版本後卻沒辦法升級為正式版實在是很嘔的事,當然你可以再去開發者頁面下載最新的 build 來重刷,或者可以直接靠 itunes 來進行升級,以下就介紹如何使用 itunes 直接升級,只需要幾個步驟:

step1. 準備一條線連接電腦,一隻安裝了 beta 或舊版本的手機
step2. 把手機關機,把線接上手機,並且不要連接著電腦
step3. 持續按著 home 鍵(直到說要放開前請持續按著)
step4. 把線接回電腦,等到看到 itunes logo 再把home 鍵放開
step5. 按照 itunes 的步驟完成