Linux 設定修改時區

Linux 上時間分成兩個部分, Universal Time 與 Local Time, Universal Time 一直會維持為 UTC 時間, 而 Local Time 則是使用者所在的時區時間, 通常我們在安裝 Linux 的時候就會完成時區的設定, 但是在 Cloud 上預設都維持在 UTC +0 時區, 當我們機房跨足不同時區時可能會有同步的問題, 因此正確的設定時區是非常重要的.

檢查時區

當主機還沒有設定時區時, 輸入指令 date 系統返回的時間會是 UTC, 若主機已經有設定時區 UTC 會變成其他時區

$ date
Sat Jun 17 15:28:00 UTC 2017

設定時區

我們可以透過以下指令進行時區設定

sudo dpkg-reconfigure tzdata

系統會跳出視窗要求你選擇所在的地理區

接著選擇時區

當設定完成後, 系統會顯示目前的設定

Current default time zone: 'Asia/Taipei'
Local time is now:      Sat Jun 17 23:51:12 CST 2017.
Universal Time is now:  Sat Jun 17 15:51:12 UTC 2017.

指令 date 所顯示的時間變成帶有時區的時間了!

Sat Jun 17 23:51:55 CST 2017

這樣一來就完成時區的設定了, 若要修改時區只要把上面的步驟在做一次就可以了.

Electron – Cannot find module ‘app’

最近將舊版的 electron 升級到最新版, 結果所有程式都不能啟動了, 全部回傳 Error: Cannot find module 'app', 在翻閱新版手冊發找到了解決辦法

問題

升級到新版 Electron 出現 Error: Cannot find module 'app'

成因

Electron 新版將 app 模組整合到 electron 內

解決辦法

舊版手冊的範例寫法如下

var app = require('app');
var BrowserWindow = require('browser-window'); 

由於 app 被整合到 electron 內了, 因此只要改寫成下方的寫法就可以正常運作了

var electron = require('electron');
var app = electron.app;
var BrowserWindow = electron.BrowserWindow;

Electron – Uncaught ReferenceError: $ is not defined

最近因為需要將新的 Web App 封裝成應用程式, 團隊決定使用 Github Electron 進行封裝, 但封裝後的程式無法運作, 本來以為是 VUE 造成的, 直到在 Console 看到了 Uncaught ReferenceError: $ is not defined 才確定是 jQuery 造成的, 但說也奇怪, VUE 正常而 jQuery 卻沒辦法註冊, 粗略看起來應該不是 js 沒有載入的問題, 經過幾番研究後確定了問題成因, 這邊做一個小筆記紀錄一下.

問題

Electron 出現 Uncaught ReferenceError: $ is not defined 錯誤

成因

Electron 的 Render 使用了 Nodejs, 並且掛入 require 到全域變數, 導致 jQuery 註冊的 $ 被覆蓋了

解決辦法

jQuery 實際上是有正確被載入的, 因此我們只需要透過下面的方法重新註冊 $ 就可以了

try {$ = jQuery = module.exports;} catch(e) {}

如此一來, jQuery 重新綁定回 $, 系統就可以正常運作了

Apache .htaccess 沒有效果

我們知道在 Apache 中可以使用 .htaccess 來針對當下目錄做相關設定, 但時常發生 .htaccess 無效的狀況, 這邊分享一下一些常見的原因與排除方法

沒有複寫權限

Apache 根目錄預設是禁止複寫設定的, 可以透過編輯 httpd.conf 當中的設定開啟複寫功能

編輯 httpd.conf

sudo vim /etc/apache/httpd.conf

找到相關目錄設定(這邊以內建路徑為例)

<Directory "/Library/WebServer/Documents">
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any

        AllowOverride None

        Require all granted
</Directory>

將 AllowOverride 修改為 All

<Directory "/Library/WebServer/Documents">
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any

        AllowOverride All

        Require all granted
</Directory>

重新啟動 Apache 即可

檔案名稱錯誤

Apache 可以修改 .htaccess 的名稱, 可能因為某些原因名稱被修改了
可以尋找設定檔中的參數 AccessFileName 來確認正確名稱

模組無效

很多時候其實 .htaccess 有生效, 只是是因為 .htaccess 中有進行模組是否存在的相關檢查, 以至於我們以為沒有生效

.htaccess 可能有類似的內容

<IfModule mod_rewrite.c>
    .......
</IfModule>

上述的 .htaccess 會檢查 Apache 是否有 rewrite 這個模組, 若有才執行, 這種狀況變成要啟動該模組才會正常運行

編輯 httpd.conf, 找到下面的內容並將前方的 # 移除

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so