トラブルシューティング

Hexoの使用中に頻繁に遭遇する問題に対する解決策のリストをここに示します。このページで問題が解決しない場合は、GitHubGoogle Groupで検索してみてください。

YAML解析エラー

JS-YAML: incomplete explicit mapping pair; a key node is missed at line 18, column 29:
last_updated: Last updated: %s

文字列にコロンが含まれている場合は、引用符で囲みます。

JS-YAML: bad indentation of a mapping entry at line 18, column 31:
last_updated:"Last updated: %s"

ソフトタブを使用していることを確認し、コロンの後にスペースを追加してください。

YAML Specで詳細を確認できます。

EMFILEエラー

Error: EMFILE, too many open files

Node.jsはノンブロッキングI/Oを持っていますが、システムによって同時に実行できる同期I/Oの最大数には制限があります。大量のファイルを生成しようとするときにEMFILEエラーに遭遇することがあります。以下のコマンドを実行して、許可される同期I/O操作の数を増やしてみてください。

$ ulimit -n 10000

Error: cannot modify limit

次のエラーに遭遇した場合:

$ ulimit -n 10000
ulimit: open files: cannot modify limit: Operation not permitted

システム全体の設定により、設定可能なulimitの値に制限があることを意味します。

制限を上書きするには:

  1. “/etc/security/limits.conf”に以下の行を追加します:
* - nofile 10000

# '*'はすべてのユーザーに適用され、'-'はソフトとハードの両方の制限を設定します
  • 上記の設定が適用されない場合があるため、”/etc/pam.d/login”と”/etc/pam.d/lightdm”に以下の行が含まれていることを確認してください。(これらのファイルが存在しない場合はこのステップを無視してください)
session required pam_limits.so
  1. systemdベースのディストリビューションを使用している場合、systemdは”limits.conf”を上書きする可能性があります。systemdで制限を設定するには、”/etc/systemd/system.conf”と”/etc/systemd/user.conf”に以下の行を追加します:
DefaultLimitNOFILE=10000
  1. 再起動

メモリ不足のプロセス

生成中にこのエラーに遭遇した場合:

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

hexo-cliの最初の行を変更してNode.jsヒープメモリサイズを増やします(ファイルを探すにはwhich hexoを使用します)。

#!/usr/bin/env node --max_old_space_size=8192

Out of memory while generating a huge blog · Issue #1735 · hexojs/hexo

Gitデプロイの問題

RPC失敗

error: RPC failed; result=22, HTTP code = 403

fatal: 'username.github.io' does not appear to be a git repository

コンピュータ上でgitを適切に設定していることを確認するか、HTTPSリポジトリURLを代わりに使用してみてください。

Error: ENOENT: no such file or directory

Error: ENOENT: no such file or directoryのようなエラーが発生した場合、タグ、カテゴリー、またはファイル名で大文字と小文字を混在させている可能性があります。Gitはこの変更を自動的にマージできないため、自動ブランチングが中断されます。

これを修正するには:

  1. すべてのタグとカテゴリーのケースを確認し、同じであることを確認します。
  2. コミット
  3. 初期化とビルド: ./node_modules/.bin/hexo clean && ./node_modules/.bin/hexo generate
  4. パブリックフォルダをデスクトップに手動でコピー
  5. マスターブランチからデプロイ用ブランチにローカルでブランチを切り替え
  6. デスクトップからのパブリックフォルダの内容をデプロイ用ブランチにコピー
  7. コミット。マージコンフリクトが表示され、手動で解決できます。
  8. マスターブランチに戻り、通常どおりデプロイ: ./node_modules/.bin/hexo deploy

サーバーの問題

Error: listen EADDRINUSE

同時に2つのHexoサーバーを起動したか、別のアプリケーションが同じポートを使用している可能性があります。port設定を変更するか、-pフラグを使用してHexoサーバーを起動してみてください。

$ hexo server -p 5000

プラグインのインストール問題

npm ERR! node-waf configure build

C、C++、またはJavaScript以外の言語で書かれたプラグインをインストールしようとすると、このエラーが発生することがあります。コンピュータに適切なコンパイラがインストールされていることを確認してください。

DTraceのエラー(Mac OS X)

{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }

DTraceのインストールに問題がある場合、これを使用してください:

$ npm install hexo --no-optional

#1326を参照

JadeまたはSwigでのデータモデルのイテレート

HexoはデータモデルにWarehouseを使用しています。これは配列ではないので、反復可能オブジェクトに変換する必要があるかもしれません。

{% for post in site.posts.toArray() %}
{% endfor %}

データが更新されない

一部のデータは更新されず、新しく生成されたファイルが前のバージョンと同一になることがあります。キャッシュをクリーンして再試行してください。

$ hexo clean

コマンドが実行されない

helpinitversion以外のコマンドが機能せず、hexo helpの内容が表示され続ける場合、package.jsonhexoが欠けていることが原因の可能性があります:

{
"hexo": {
"version": "3.2.2"
}
}

コンテンツのエスケープ

Hexoは記事をレンダリングするためにNunjucksを使用しています(以前のバージョンでは、同様の構文を共有するSwigが使用されていました)。{{ }}または{% %}で囲まれたコンテンツはパースの際に問題を引き起こす可能性があります。rawタグプラグイン、単一のバックティック`{{ }}`、またはトリプルバックティックでパースをスキップできます。
または、レンダラーのオプション(サポートされている場合)、API、またはFront Matterを通じてNunjucksタグを無効にすることもできます。

{% raw %}
Hello {{ world }}
{% endraw %}
```
Hello {{ world }}
```

ENOSPCエラー(Linux)

$ hexo serverコマンドを実行するときに、時々以下のエラーが返されます:

Error: watch ENOSPC ...

これは、$ npm dedupeを実行するか、効果がない場合Linuxコンソールで次のコマンドを試すことで修正できます:

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

これにより、監視できるファイルの数の制限が増加します。

EMPERMエラー(Windows Subsystem for Linux)

BashOnWindows環境で$ hexo serverを実行すると、次のエラーが返されます:

Error: watch /path/to/hexo/theme/ EMPERM

残念ながら、WSLは現在ファイルシステムウォッチャをサポートしていません。そのため、hexoサーバーのライブ更新機能は現在利用できません。ファイルを最初に生成してから、静的サーバーとして実行することにより、WSL環境からサーバーを実行することは可能です:

$ hexo generate
$ hexo server -s

これは既知のBashOnWindowsの問題であり、2016年8月15日にWindowsチームはそれに取り組むと述べました。問題のUserVoice提案ページで進捗状況を確認し、それを優先してもらうよう奨励することができます。

テンプレートレンダリングエラー

$ hexo generateコマンドを実行するときに、時々以下のエラーが返されます:

FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: (unknown path)

考えられる原因:

  • ファイルに認識できない単語が含まれていることがあります。例えば、見えないゼロ幅文字などです。
  • タグプラグインの誤用または制限。
    • コンテンツが{% endplugin_name %}で閉じられていないブロックスタイルのタグプラグイン
      # 誤り
      {% codeblock %}
      fn()
      {% codeblock %}

      # 誤り
      {% codeblock %}
      fn()

      # 正しい
      {% codeblock %}
      fn()
      {% endcodeblock %}
    • タグプラグインでNunjucksのような構文を含んでいる場合、例えば{#。この例の回避策は、トリプルバックティックを代わりに使用することです。コンテンツのエスケープセクションに詳細があります。
      {% codeblock lang:bash %}
      Size of array is ${#ARRAY}
      {% endcodeblock %}

YAMLException(Issue #4917

古いバージョンからhexo^6.1.0にアップグレードすると、$ hexo generateを実行したときに以下のエラーが発生する可能性があります:

YAMLException: Specified list of YAML types (or a single Type object) contains a non-Type object.
at ...

これは、パッケージマネージャーによって自動的に解決できない不正な依存関係設定(例: js-yaml)が原因である可能性があり、手動で更新する必要がある場合があります:

$ npm install js-yaml@latest

または、yarnを使用している場合は

$ yarn add js-yaml@latest

を実行してください。