Nick Shek's Blog

Failed to listen on localhost:8000 (reason: Address already in use)

若使用 php -S localhost:8000來進行development時,沒有使用control +C 結束程序,便會發生該問題,因此可以建立以下bashscript結束名為"php"的proceses

#!/bin/bash
pid=$(ps -fe | grep '[p]hp' | awk '{print $2}')
if [[ -n $pid ]]; then
    kill $pid
else
    echo "Does not exist"
fi

Socket.io 1.3.5 cdn 同源問題

假設己經有一個HTTPS加密網站,為了令網站更快速。因此Socket.io使用了以下的javascript cdn :

<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>

但是socket.io server 會在 polling的請求回覆400 Bad request

解決方法是從Socket.io依賴的原始碼找出return Access-Control-Allow-Origin Header的地方,根據socket.io v1.3.5 的源始碼,return Access-Control-Allow-Origin Header的地方位於node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js

/**
 * Returns headers for a response.
 *
 * @param {http.ServerRequest} request
 * @param {Object} extra headers
 * @api private
 */

XHR.prototype.headers = function(req, headers){
  headers = headers || {};

  if (req.headers.origin) {
    headers['Access-Control-Allow-Credentials'] = 'true';
    headers['Access-Control-Allow-Origin'] = req.headers.origin;
  } else {
    headers['Access-Control-Allow-Origin'] = '*';
  }

  this.emit('headers', headers);
  return headers;
};

將該function 改成

/**
 * Returns headers for a response.
 *
 * @param {http.ServerRequest} request
 * @param {Object} extra headers
 * @api private
 */

XHR.prototype.headers = function(req, headers){
  headers = headers || {};

  if (req.headers.origin) {
    headers['Access-Control-Allow-Credentials'] = 'true';
    if(req.headers.origin == "https://www.example-domain.com/"){
        headers['Access-Control-Allow-Origin'] = "https://cdn.socket.io/";
    }else{
        headers['Access-Control-Allow-Origin'] = req.headers.origin;
    }
  } else {
    headers['Access-Control-Allow-Origin'] = '*';
  }

  this.emit('headers', headers);
  return headers;
};

或者直接新增 headers['Access-Control-Allow-Origin'] = "https://cdn.socket.io/"; 雖然修改方法很醜。但至少可以令網站使用Socket.io CDN

如何令git repo 連接己經存在的heroku app?

假設你己經在https://toolbelt.heroku.com/下載了heroku 工具程式.若想把原本的應用程式連接至heroku只需要在程式的根目錄輸入heroku create,但是這樣會建立了一個全新的heroku程式。

若我在heroku己經有一個應用程式為 project , 我想將原本的git 連接至 project 而不是重新建立一個新的應用程式,只需要在程式的根目錄輸入 heroku git:remote -a project