In case you’re experiencing problems with using Hexo, here is a list of solutions to some frequently encountered issues. ถ้าหากว่าคุณพบเจอปัญหาเมื่อใช้ hexo ท่ีนี่มีตารางของวิธีการแก้ปัญหาที่พบเจอบ่อยครั้ง ถ้าเกิดปัญหาท่ีไซตืนี้ไม่มี ลองค้นหาวิธีการแก้ไขปัญหาใน GitHub หรือ Google Group
YAML Parsing Error
JS-YAML: incomplete explicit mapping pair; a key node is missed at line 18, column 29: |
ปกคลุม string ด้วย quotation ถ้ามันมีเครื่องหมาย (:) อยู่ด้วย
JS-YAML: bad indentation of a mapping entry at line 18, column 31: |
ทำให้แน่ใจว่าคุณกำลังใช้ soft tab และเพิ่ม space หลังเครื่องหมาย (:)
สำหรับข้อมูลเพิ่มเติม ไปดูท่ี YAML Spec
EMFILE Error
Error: EMFILE, too many open files |
แม้ว่า Node.js มี I/O ท่ี non-blocking ปริมาณมากท่ีสุดของ I/O ท่ี synchronous ยังจำกัดอยู่เนื่องด้วยระบบของ hexo คุณอาจจะพบเจอข้อผิดพลาดท่ีเป็น EMFILE error ในเมื่อลอง generate ไฟล์เป็นจำนวนมาก คุณอาจจะลองรันคำสั่งต่อไปเพื่อเพิ่มจำนวนของ I/O operation ท่ี synchronous และถูกอนุญาตแล้ว You may come across an EMFILE error when trying to generate a large number of files. You can try to run the following command to increase the number of allowed synchronous I/O operations.
$ ulimit -n 10000 |
Error: cannot modify limit
If you encounter the following error:
$ ulimit -n 10000 |
It means some system-wide configurations are preventing ulimit
to being increased to a certain limit.
To override the limit:
- Add the following line to “/etc/security/limits.conf”:
* - nofile 10000 |
- The above setting may not apply in some cases, ensure “/etc/pam.d/login” and “/etc/pam.d/lightdm” have the following line. (Ignore this step if those files do not exist)
session required pam_limits.so |
- If you are on a systemd-based distribution, systemd may override “limits.conf”. To set the limit in systemd, add the following line in “/etc/systemd/system.conf” and “/etc/systemd/user.conf”:
DefaultLimitNOFILE=10000 |
- Reboot
Process Out of Memory
เมื่อคุณพบข้อผิดพลาดนี้ในช่วง generation:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory |
คุณเพิ่มขนาด heap memory ของ Node.js ได้ด้วยการเปลี่ยนบรรทัดแรกของ hexo-cli
(หาไฟล์นี้ได้ด้วยคำสั่ง which hexo
)
#!/usr/bin/env node --max_old_space_size=8192 |
Out of memory while generating a huge blog · Issue #1735 · hexojs/hexo
Git Deployment Problems
RPC failed
error: RPC failed; result=22, HTTP code = 403 |
คุณต้องตรวจให้แน่ใจว่าได้ตั้งค่า git อย่างถูกต้อง(set up git) ในคอม หรือลองใช้ URL ของ HTTPS repository แทน
Error: ENOENT: no such file or directory
ถ้าคุณพบข้อผิดพลาดท่ีว่า Error: ENOENT: no such file or directory
เหตุผลส่วนใหญ่จะเป็นการเขียนผิดอักษรตัวใหญ่กับตัวเล็กในแท็ก ประเภทหรือชื่อไฟล์ของคุณ git ไม่สามารถ merge การเปลี่ยนแปลงนี้ได้โดยอัตโนมัติ จึงทำให้การบวนการ automatic branching ถูกหยุดไป Git cannot automatically merge this change, so it breaks the automatic branching.
เพื่อแก้ไขข้อผิดพลาดนี้ ลองทำตามขั้นตอนต่อไปได้:
- Check every tag’s and category’s case and make sure they are the same.
- Commit
- Clean and build:
./node_modules/.bin/hexo clean && ./node_modules/.bin/hexo generate
- Manually copy the public folder to your desktop
- Switch branch from your master branch to your deployment branch locally
- Copy the contents of the public folder from your desktop into the deployment branch
- Commit. You should see any merge conflicts appear that you can manually resolve.
- Switch back to your master branch and deploy normally:
./node_modules/.bin/hexo deploy
Server Problems
Error: listen EADDRINUSE |
คุณอาจจะเปิด hexo server มากกว่าหนึ่งตัวในขณะเดียวกัน หรือแอปอื่นกำลังใช้ port เดียวกัน สำหรับการแก้ไขเรื่องนี้ลองแก้ไขการตั้งค่าของ port
หรือเปิดเซร์ฟเวอร์ hexo ใน port ท่ีตั้งค่าโดยแท็ก-p
Try to modify the port
setting or start the Hexo server with the -p
flag.
$ hexo server -p 5000 |
Plugin Installation Problems
npm ERR! node-waf configure build |
ข้อผิดำพลาดนี้เกิดขึ้นเมื่อคุณลองใช้ปลั๊กอินท่ีเขียนด้วยภาษา C, C++ หรือ ภาษาอื่นๆ ท่ีไม้ใช่ javascript คุณต้องทำให้แน่ใจว่าได้ติดตั้ง compiler ท่ีถูกต้องแล้วในคอม Make sure you have installed the right compiler on your computer.
Error with DTrace (Mac OS X)
{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' } |
การติดตั้ง DTrace อาจจะพบ issue บ้าง กรุณาใช้คำสั่งต่อไป:
$ npm install hexo --no-optional |
สำหรับข้อมูลเพิ่มเติม ไปดูท่ี #1326
Iterate Data Model on Jade or Swig
hexo ใช้ Warehouse เป็นแบบจำลองข้อมูล เนื้องจากว่ามันไม่ใช่ array ก็เลยคุณต้องเปลี่ยนจาก object ไปเป็น iterable It’s not an array so you may have to transform objects into iterables.
{% for post in site.posts.toArray() %} |
Data Not Updated
data บางอย่างอัพเดทไม่ได้ หรือไฟล์ท่ี generate ใหม่นั้นเหมือกับไฟล์ของเวอร์ชั่นล่าสุด ถ้าเป็นอย่างนี้ กรุณาเคลีย cache และลองอีกครั้ง Clean the cache and try again.
$ hexo clean |
No command is executed
ุถ้าคุณไม่สามารถรันคำสั่งนอกจาก help
init
และ version
และผลท่ีส่งกลับจากคำสั่งนั้นมีแต่เนื้อหาของ hexo help
ปัญหานี้อาจเกิดจากการขาดแคลน hexo
ในไฟล์ package.json
:
{ |
Escape Contents
hexo ใช้ Nunjucks เพื่อ render โพสต์ (ในเวอร์ชั่นเก่าใช้ Swig ซึ่งมี syntax เหมือนกัน) เนื้อหาที่ห่อด้วย {{ }}
หรือ {% %}
อาจจะถูก parse ไม่ถูกต้องและเกิดปัญหาบ้าง เพื่อป้องกันเรื่องนี้เกิดขึ้น คุณสามารถติดตั้งปลั๊กอินแท็ก You can skip the parsing by wrapping it with the raw
tag plugin, single backtick `{{ }}`
or triple backtick. Content wrapped with {{ }}
or {% %}
will get parsed and may cause problems. You can skip the parsing by wrapping it with the raw
tag plugin, a single backtick `{{ }}`
or a triple backtick. Alternatively, Nunjucks tags can be disabled through the renderer’s option (if supported), API or front-matter.
{% raw %} |
``` |
ENOSPC Error (Linux)
บางทีเมื่อรันคำสั่ง $ hexo server
ผลท่ีส่งกลับมาเป็นข้อผิดพลาด:
Error: watch ENOSPC ... |
It can be fixed by running $ npm dedupe
or, if that doesn’t help, try the following in the Linux console:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p |
การรันคำสั่งดังกล่าวจะเพิ่มจำนวนไฟล์ท่ี hexo สามารถเฝ้าดูได้
EMPERM Error (Windows Subsystem for Linux)
เมื่อรัน $ hexo server
ในสภาพแวดล้อมของ BashOnWindows จะมีข้อผิดพลาดต่อไปส่งกลับมา:
Error: watch /path/to/hexo/theme/ EMPERM |
ท่ีน่าเสียดายคือ WSL ไม่สนับสนุน watcher ของระบบไฟล์ ดังนั้น คุณลักษณะการเฝ้าดูการเปลี่ยนแปลงไฟล์โดยไม่ต้องเปิดเชร์ฟเวอร์ใหม่นั้นของ hexo จะไม่สามารถใช้ประโยชน์ได้ แต่คุณยังรันเซร์ฟเวอร์ได้ภายในสภาพแวดล้อม WSL โดย generate ไฟล์ก่อนแลัวรันเซร์ฟเวอร์แบบคงที่: Therefore, the live updating feature of hexo’s server is currently unavailable. You can still run the server from a WSL environment by first generating the files and then running it as a static server:
$ hexo generate |
นี่คือ a known BashOnWindows issue และในวันท่ี 15 สิงหาคมของปี 2559 ทีมงาน Windows กล่าวว่าจะมุ่งแก้ไขเรื่องนี้ให้ได้ คุณสามารถรู้ความคืบหน้าของการแก้ไขเรื่องนี้และยกระดับ priority ในเพจ the issue’s UserVoice suggestion page You can get progress updates and encourage them to prioritize it on the issue’s UserVoice suggestion page.
Template render error
บางทีการรันคำสั่ง$ hexo generate
จะส่ง error กลับ:
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html |
Possible cause:
One possible reason is that there are some unrecognizable words in your file, e.g. invisible zero width characters.
Incorrect use or limitation of tag plugin.
- Block-style tag plugin with content is not enclosed with
{% endplugin_name %}
# Incorrect
{% codeblock %}
fn()
{% codeblock %}
# Incorrect
{% codeblock %}
fn()
# Correct
{% codeblock %}
fn()
{% endcodeblock %}- Having Nunjucks-like syntax in a tag plugin, e.g.
{#
. A workaround for this example is to use triple backtick instead. Escape Contents section has more details.
{% codeblock lang:bash %}
Size of array is ${#ARRAY}
{% endcodeblock %}- Block-style tag plugin with content is not enclosed with
YAMLException (Issue #4917)
Upgrading to hexo^6.1.0
from an older version may cause the following error when running $ hexo generate
:
YAMLException: Specified list of YAML types (or a single Type object) contains a non-Type object. |
This may be caused by an incorrect dependency(i.e. js-yaml
) setting that can’t be solved automatically by the package manager, and you may have to update it manually running:
$ npm install js-yaml@latest |
or
$ yarn add js-yaml@latest |
if you use yarn
.