June 15, 2020

Ghost 0.4.2 跨世代升級到 3.19.2 版本

Tags: ghostCentOsnode.js | (3 min read)
Ghost 0.4.2 跨世代升級到 3.19.2 版本

Y Cheung 從最早的 Ghost 0.1版本就開始嘗試使用 ghost 平台來寫博客了,由於nodjs版本升級太麻煩就沒有慾望升級ghost版本,之後就一直停留在 0.4.2 版本很多年了。終於下定決心要把它更新!(握拳)

理想中的升級是這樣的,先在後台導出json,然後在安裝了最新版本後導入json,再把 /content/image 複製到新安裝的ghost裡,結束。

奈何現實總是骨感的,幸好 Y Cheung 先是在Local電腦上嘗試。新的Ghost終於有docker image了,一條命令飛快就把ghost站點起起來了,然後一步步設置好進入後台,導入json文件⋯⋯ GG!提示說要先導入到1.0版本的ghost,再導出json到最新版本。於是開始折騰安裝古老的1.0版本Ghost。

甚麼?!1.0版本的官方文檔不見了!!!Google查找網絡上的其他資源也多數簡略描寫,安裝包地址是甚麼latest,然後引導指向官方文檔。可是官方文檔連結失效了⋯⋯( ̄◇ ̄;) 當時的latest現在也不是了,安裝包地址也用不了 (撓頭)。Y Cheung 只好嘗試從source code安裝。

一開始的想法是git clone source code 切 1.0 的tag。花費6個多小時,最終失敗。mac 上nodejs版本太高不匹配1.0版本的需求,裝不上sqlite3等包。安裝n以後切換到了匹配的nodejs版本6後終於可以運行了,但是不知道為什麼 `/core/server/admin/views/` 裡一直是空的,build不出來,按照 「Error: No default engine was specified and no extension was provided. 」的說法是要手動把文件拷貝到這裡來,但去哪裡生呢?唉。還是去找了1.0 Release zip 包。不得不說Github 上翻頁找以前的release包實在太不方便了。

裝好之後,順利的導入json文件,再重新Export content。然後再將文件導入到ghost最新板中。成功!

本地測試成功後就去服務器上升級ghost了。

  • 備份舊ghost站點的文件和數據庫
  • 停止運行舊ghost站點
  • 更新系統nodejs版本

又卡了。系統原先安裝的是nodejs 2.x 版本,當時做了因為nodejs版本問題做了很多設置已經不記得了,導致的結果就是, yum install nodejs 始終在4.x和6.x徘徊,即便我正確添加了rpm curl -sL https://rpm.nodesource.com/setup_12.x | bash - 。反覆試了很多次,cache也清空了很多次,還是不行。仔細查找,直到在「Fail to install nodejs 8 on CentOS 7 」發現有人提及應該執行 `yum clean metadata` 。解決!終於安裝好了nodejs 12 !

  • 安裝 ghost cli
  • 安裝 ghost
  • 運行 ghost
  • 後台執行import content
  • 複製舊ghost站點的 \content\images 文件夾到新站點的對應位置

事情還沒有結束,後台看起來一切正常了,前台卻加載不了 theme 的 assets 文件,都404了。找問題找了半天,才發現是之前的Nginx的配置文件上的規則設定問題,因為新版本ghost的文件結構變了,所以舊的Nginx 配置文件上的規則涉及到路徑的都需要更新。


延伸閱讀: