Deploying a Node.js application to Heroku

18 January 2014

Node.js是近來很夯的一個javascript framework,
優點有even-driven, non-blocking IO...etc,
這裡就不贅述了,直接進入主題吧!


這篇假設大家已經有heroku帳號了,
就不教大家怎麼註冊,或者說明每個command了,
不會的可以去看上一篇

這篇主要教如何建立一個基本的node.js application,
下一篇會教如何結合mongodb,
而這篇會使用到:
     1. npm (node.js的package manager)
     2. express.js (web framework,你可以想像成flask, django, springmvc)



    進入正題吧!

    1. init

    先建立我們需要的環境,
    mkdir test-app
    cd test-app
    git init
    heroku create your-app-name

    2. install express.js

    express.js需要透過npm來安裝,
    那npm怎麼取得呢?現在只要你安裝node.js,
    基本上就會幫你把npm裝好了,所以不用特別去裝!
    使用npm安裝package有一個好處,
    npm就像是virtualenv一樣,
    它會為每個application建立一個獨立的環境,
    每一個node.js application使用的package都是獨立的,彼此不會互相干擾!

    安裝指令:
    npm install express.js

    3. development

    先建立index.js這個檔案

    vim index.js

    內容如下:
    // include express module
    var express = require("express");

    var app = express();
    app.use(express.logger());

    app.get('/', function(req, resp) {
    resp.send("hello world");
    });

    var port = process.env.PORT || 5000;
    app.listen(port, function() {
    console.log("Listening on " + port);
    });


    4. deployment

    首先要先建立一個檔案名為Procfile,
    這檔案是讓node.js知道此process type,
    vim Procfile

    內容如下:
    web: node index.js

    接著建立一個package.json
    這個檔案是記錄著你的application要用到哪些package,
    但你不需要自己建立這個檔案,你可以透過npm來幫你generate這個file,
    指令如下,
    npm init

    準備完上述兩個檔案後,就可以上傳至heroku了!
    git add . 
    git commit -m 'first commit'
    git push heroku master

    完成以後就可以到你的application去看,(http://your-app-name.herokuapp.com/)
    應該就會看到hello world字樣了.
    在下一篇會講如何在heroku上整合mongodb.







    read more »


    How to record the screen on Android?

    07 January 2014




    Now Android 4.4 or higher device can use tool to record screen.
    It's useful for developer who want to demo their apps.


    1. Download the Android SDK

    link


    2. open the terminal



    3. cd to the SDK path
    cd ~/android-sdk-macosx/platform-tools


    4. start recording
    ./adb shell screenrecord /sdcard/demo.mp4


    5. stop recording

    Stop the screen recording by pressing Ctrl-C
    control+C


    6. Get the video

    The video will be stored in you sd card.
    Please reference the screenshot.


    read more »


    Heroku:deploy a python application

    26 November 2013

    恩,昨天心血來潮想deploy一個application到GAE (Google App Engine)上,
    赫然發現GAE現在只支援JDK 7,說實在我很不想升上去!
    且又想到要在新電腦上裝eclipse plugin for GAE很麻煩,
    所以把念頭轉到了Amazon Web Service Elastic Compute Cloud (EC2),
    又赫然發現我的AWS帳號已經超過一年了...也就是說不能使用free-tier方案!

    好吧,只好換到heroku上了!
    heroku比較像是GAE一樣,屬於PaaS平台,
    但deploy方式比GAE方便多了!也快多了!
    在Heroku上deploy方式是用git!
    可以在上面deploy Ruby, node.js, Java, Python...等語言的application!

    這篇會用python來講解,
    雖然我最熟java,但heroku預設好像是用maven來當build system,
    對maven就沒那麼熟!且我實在很懶得設定那很複雜的xml....
    所以退而求其次選python,
    而剛好python是使用flask做framework,剛好也玩過這framework,
    所以就使用python!



    Step 1:註冊

    先到https://id.heroku.com/signup/devcenter註冊帳號,
    蠻方便的,不需要填寫太多資料!


    Step 2:安裝Heroku toolbelt

    先去https://toolbelt.heroku.com/ 下載toolbelt,
    因為我是使用mac,所以就下載mac版本的來安裝!


    Step 3:Login Heroku

    打開你的terminal,
    輸入下面指令,
    heroku login
    會要求你輸入heroku上註冊的email及密碼!
    接著會把你local的ssh key上傳至heroku上去!


    Step 4:在後台create app

    接著回到heroku的管理後台建立一個app,
    如下圖,點選下圖中的Create a new app,





    接著會popup一個dialog要以輸入這個app名稱(如下圖)!這個app名稱就會變成你的sub-domain,
    假設我輸入hello-ken,那麼到時候我的app url就會是hello-ken.herokuapp.com!
    輸入完以後請點選下圖中的create app.




    這樣就完成create app,接著會跟你說你的app information!如下圖.
    請把下圖中的git資訊記下來!因為這就是你app的repo了!


    Step 5:在local create app

    接著你就要把在heroku上的app clone下來,
    指令如下,

    git clone git@heroku.com:hello-ken.git -o heroku

    clone完成以後,你的目錄底下應該會有一個hello-ken資料夾!



    Step 6:安裝virtualenv

    virtualenv可以讓你在local模擬獨立的python環境!
    然後你可以在你的環境中安裝任何python相關package,且不會影響到local system!
    安裝指令:
    curl -O https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.10.1tar.gz
    tar xvfz virtualenv-1.10.1.tar.gz
    cd virtualenv-1.10.1
    sudo python setup.py install


    Step 7:建立一個獨立的env

    建立環境
    virtualenv venv --distribute

    activate環境,這裡要注意一點,如果你terminal關掉重開,那麼就要重新去source一次!
    source venv/bin/activate


    Step 8:安裝Flask, gunicorn

    Flask是一個web framework,
    gunicorn是一個web server.
    pip install Flask gunicorn


    Step 9:寫第一個app

    在這個step就開始寫程式主體,
    cd hello-ken
    vim index.py


    需搭配Flask的格式!index.py的內容如下!
    app.route的意思就是,當user request path爲/時,就執行hello這個method,
    import os
    from flask import Flask

    app = Flask(__name__)

    @app.route('/')
    def hello():
    return 'Hello World!'



    Step 10:定義這個app的type

    我們必須要讓heroku知道這個app的type,
    所以要建立一個檔案(Profile),
    vim Profile

    內容如下:
    web: gunicorn index:app



    Step 11:local test

    完成上面的步驟以後,
    其實就可以在local端測試,
    在hello-ken目錄底下指令,
    foreman start

    接著就會在terminal中顯示你的test url,
    只要打開browser就可以瀏覽了!


    Step 12:declare requirements

    在這步驟要讓heroku知道我們application的requirement,
    我們可以透過pip的指令去產生那個requirement檔案,
    指令如下:
    pip freeze > requirements.txt



    Step 13:deploy app to Heroku

    在這步驟就要把我們剛剛的東西通通push上去heroku了!
    但我們要先建立.gitignore檔案,
    把一些不需要push上去的東西拿掉!
    venv
    *.pyc


    接著就add, commit, push吧!
    git add .
    git commit -m "first commit"
    git push heroku master

    順利push完以後,就可以到hello-ken.herokuapp.com看看有沒有成功了!
    (記得hello-ken要換成你自己申請的app name)


    接著之後的deploy都是靠git來完成!
    真的是比GAE方便很多啊!











    read more »