終於搬家到 WordPress 了

上個週末,順利的把網站搬到 WordPress 上面了

本來是使用 Hexo ,其實也沒什麼不好,而且可以用 Markdowm 寫文章也很舒服,只是每次要上新文章的話不太方便,都得 push 到 GitHub 上面才行,所以就一直想要搬到一個有後台的部落格系統上面,不過最近實在太忙了,所以一拖就拖到最近才開始動工。

至於為什麼選用 WordPress 呢?

WordPress 的功能真的非常完整,有許多實用的外掛工具可以選用(而且免費)。而且使用者非常的多,號稱地球上有 36% 的網站是以 WordPress 為基礎架設,這意味著,遇到問題的時候,可以更容易的在社群中找到各種資源。不過最主要的原因是,最近開始跑 WordPress 小聚,總覺得要學習一個東西最快的方法就是直接做就對了!

凡是有優點就有缺點,我覺得 WordPress 比較麻煩的是一開始要自架主機,雖然外面很多主機商都有提供一鍵安裝,但是我就覺得給別人打包好好不太放心,所以還是自己來比較安心!

或者說是也可以直接選用 wordpress.com,不太需要去擔心穩定性或流量的問題,而且也有免費版,只是會出現廣告、不能使用自己的網域名稱、完全不能使用外掛模組、佈景主題也只有提供一些可以挑選。當然也可以付費,但是即使是花了每個月 $799 左右的「Business」,還是很多限制,所以我還是決定自己架設主機!

改天再來分享怎麼用 LEMP 架構自架 WordPress 吧!

當然了,如果有部落格搬移需求的,也是可以找我

 

Laravel 如何清理快取

有時候更新了程式碼,但是沒辦法即時看到結果,這是由於該應用程式被快取所導致。這裡記錄了一些清理快取的方法

  1. 清理應用程式快取  :php artisan cache:clear
  1. 清理路由快取:php artisan route:clear
  1. 清理設定快取:php artisan config:clear
  1. 清理編譯的視圖文件:php artisan view:clear
 

Laravel 使用 env 函式讀取環境變數為 null 的問題

在 Laravel 專案中,如果執行了 php artisan config:cache 命令把配置檔案快取起來後,在使用 env 函式讀取環境變數的值,會變成 null,但是執行 php artisan config:clear,清除配置快取後,又可以讀取了,就覺得很奇怪

看了一下,得知在 Laravel 中,如果執行 php aritisan config:cache 命令後,Laravel 就會把 app/config 目錄下的所有配置檔案快取到 bootstrap/cache/config.php 裡面。正因為有了這個快取配置檔案,在其他地方使用 env 函式,就會讀取不到環境變數,所以返回 null.

接著看一下 Illuminate/Foundation/Bootstrap/DetectEnvironment.php 的這段程式碼:

 

public function bootstrap(Application $app) {
    if (! $app->configurationIsCached()) {
        $this->checkForSpecificEnvironmentFile($app);
        try {
            (new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
        } catch (InvalidPathException $e) {
            //
        }
    }
}

 

這個方法在框架啟動後就會執行,這段程式碼說明了如果存在快取配置檔案,就不會去設定環境變數了

,配置都讀快取配置檔案,而不會再讀環境變數了。因此,如果做快取,一旦執行 php artisan config:cache 之後,env 函式就不起作用了

如何解決 PHP cURL error code 60

最近在開發的時候用到 AWS 的 PHP SDK ,然後就會踢到這個錯誤:

1Fatal error: Uncaught exception ‘cURL_Exception’ with message ‘cURL resource: Resource id #10; cURL error: SSL certificate problem: unable to get local issuer certificate (cURL error code 60).

其實就是 SSL 憑證出了點問題,所以沒辦法 cURL,大概爬了一下文,其實解決的方法其實很簡單,這邊簡單的紀錄一下:

  1. 先下載這份使用證書:
https://curl.haxx.se/ca/cacert.pem
  1. 然後去 php.ini 設定
1curl.cainfo = “path_to_cert\cacert.pem” // 剛剛那份證書的路徑

這樣就可以正常使用了

產生任何 Mock HTTP 回應的好工具 – Mocky.io

最近後端同事需要一個前端介面去偵錯,所以協助他開發前端,中間溝通的 JSON 都定義好了,但是後端遲遲還在開發的狀態。

所以找到一個好用的線上工具叫做 #Mocky,可以產生 Mock (假的/模擬的) HTTP 回應,支援很多種 MIME Type 與自訂 Headers 回應標頭,可以讓前端程式進行任何類型的測試,也有一些好用的功能,比如說可以測試 HTTP 回應慢的時候的如何進行非同步多工處理,我覺得非常實用,所以紀錄一下!

Mocky.io

Jsonp Support

可以增加 ?callback=myfunction 在 mocky URL 後面,去啟用 jsonp

Response delay

可以增加 ?mocky-delay=100ms 在 mocky URL 後面,去延遲反應時間

Cors policy

遇到 Cors policy 的問題的話,在 mocky URL 前面增加 https://cors.io/? ,可以略過這問題

Go 開發環境設定 Eclipse+GoClipse(Mac OS X)

因為工作上需要,所以最近開始摸 Go。加上研究所考試也差不多告一個段落,因此最近也可能會比較頻繁的更新 Go 相關的文章。

環境

  • MacOS X 10.10.2
  • Go 1.4.2
  • Eclipse 4.4 (Eclipse IDE for Java EE Developers)
  • GoClipse 0.9.1

本文建置時間在 2017 年 03 月左右,如果過太久本文可能會失效,若您使用環境不同,可能會有不同的結果,但基本上都可以按照此流程。然後,我以一個完全不懂的角度寫這篇文章,除了幫助自己記憶之外,希望能夠幫到跟我遇到同樣問題的人。

安裝和設定 Go

  • 這邊我使用 Homebrew 去安裝 go
brew install go

 

  • 下指令version“`確認一下有沒有成功裝進去。
    $ go version
    go version go1.4.2 darwin/amd64 #有的話會出現 go 版本

環境變數設定

  • 為了可以使用 go ,打開你的 bash_profile ,加上下面幾行
Imgur

在 “`src “`目錄下,創建 go 文件。

```go
//src/hello/hello.go
package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

來跑跑看吧!如果有正確輸出,那就是沒問題了!

Imgur

參考資料:

在 LINE LIFF 應用上 debug – vConsole

LIFF

LINE Front-end Framework(LIFF)是在 LINE 中運行的Web應用程序的平台。

啟動 LIFF時,LIFF 應用程式可以從 LINE app 中獲取數據,例如: LINE 用戶 ID。 LIFF 應用程式也可以來為用戶發送消息的功能。

我自己的 LIFF 應用

像是在我的 MiKA 這隻 chatbot 中,活動和名片的創建,或者是 MiKA STORE就是用 LIFF 設計而成

Imgur

LIFF 本身的架構相當簡單,其實就是引入一個 JavaScript 文件,然後呼叫對應的函示就可以完成很多包裝好的功能,官方的文件跟範例程式碼都很詳細,可以自己參考看看:官方文件

開發的困難點

不過開發的過程很多時候需要在 LINE APP 上頭做操作,在電腦上開瀏覽器的開發人員工具是不會有效果的,例如說要取得 LINE user id ,在瀏覽器上就會取得空值。不過有些時候要 debug 又非得要這些開發人員工具的協助

使用 vConsole

vConsole 是騰訊所推出的一個開源專案,可以解決 LIFF 測試的問題,此一工具簡單來說就是將瀏覽器的開發者工具,透過前端的方式呈現出來,而且安裝非常之容易,只要將程式碼下載下來後,嵌入 LIFF 的頁面即可

<script src="path/to/vconsole.min.js"></script>
<script>
    // init vConsole
    var vConsole = new VConsole();
    console.log('Hello world');
</script>

 

Django admin CSS 遺失的問題

Django 嘗試使用 Nginx + uwsgi 去部署後,出現 admin 的 CSS, Javascript……等,都噴 404

分析

在我的 Django 專案中,setting.py中配置是這樣

STATIC_URL ='/static/'
STATICFILES_DIRS =(
    os.path.join(BASE_DIR,“static”),
)

 

解決方案決之路

在 setting.py 中新增配置 STATIC_ROOT ,然後執行 python manage.py collectstatic

此時關於 static 的配置如下

STATIC_ROOT ='/opt/nginx/static/'
STATIC_URL ='/static/'
STATICFILES_DIRS =(
    os.path.join(BASE_DIR,“static”),
)

 

可以看出 python manage.py collectstatic 會收集 Django 中所有的靜態資源,並且放到 STATIC_ROOT 管理訪問

此時,修改 Nginx 中關於 Django 項目的 static 配置為:

location /static {
    # alias /project/django/simpleblog/static;
    alias /opt/nginx/static;
}

最後 admin 就可以正常用 css 了!

Django 從 SQLite 切換到 MySQL 時總是提示 No module named ‘MySQLdb’

初次使用 Django ,預設的資料庫是 SQLite ,想切換使用 MySQL,配置了資料庫之後,runserver 總是會出錯

'Did you install mysqlclient or MySQL-python?' % e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?

後來查資料,看來是 python3 之後,原本的 python2 的 mysqldb 已經不能連接 mysql 了,要改成使用pymysql,來連接 mysql 。

於是我嘗試使用 pip 安裝了 PyMySQL,還是報錯,所以我再查了一下,原來還要在網站設定的 __init__.py 文件中再添加

import pymysql
pymysql.install_as_MySQLdb()

這樣就可以正常連接 MySQL 了,供大家參考

Django 將所有的 app 放到統一的目錄下進行管理

Django 的 project 寫久了,app 會越來越多,然後就零散在整個專案下,很雜亂,所以研究了一下,能不能將 app 集中放在同個資料夾下面做管理

看了一下網路上的文章後,方法很簡單

首先在專案資料夾底下新建一個資料夾 apps

接著,將設計的好的 app,拖放到 apps 中

記得最後要修改 settings.py 運行時的的搜尋路徑

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 在這行底下添加
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

另外,不要忘記 import sys

最後,啟動伺服器 runserver,測試看看有沒有設置成功