Как мне сказать плагинам gitit, где находятся библиотеки? - PullRequest
3 голосов
/ 27 февраля 2020

Короткая версия

Я настроил gitit на использование его плагина «Deprofanizer», но когда я запустил его, он потерпел неудачу, сказав:

Loading plugin 'plugins/Deprofanizer.hs'...

plugins/Deprofanizer.hs:6:1: error:
    Could not find module ‘Network.Gitit.Interface’
    Use -v to see a list of the files searched for.
  |
6 | import Network.Gitit.Interface
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gitit: Error loading plugin: plugins/Deprofanizer.hs

Очевидно, он нашел плагин, но потом не смог скомпилировать.

Как мне это исправить?

Более подробная версия

Я установил gitit вики согласно инструкции , используя stack install. Если я просто запускаю gitit, он работает отлично: он создает каталог static, инициализирует свою базу данных и запускает службу HTTP на порту 5001, как объявлено.

Но я не могу получить плагины для работы, что, по-видимому, связано исключительно с конфигурацией.

Пример gitit configuration содержит объяснение того, как настроить плагины:

plugins:
# specifies a list of plugins to load.  Plugins may be specified
# either by their path or by their module name.  If the plugin name
# starts with Gitit.Plugin., gitit will assume that the plugin is
# an installed module and will not try to find a source file.
# Examples:
# plugins: plugins/DotPlugin.hs, CapitalizeEmphasisPlugin.hs
# plugins: plugins/DotPlugin
# plugins: Gitit.Plugin.InterwikiLinks

В конфигурации по умолчанию нет плагинов. Несколько плагинов поставляются с gitit, и приведенные здесь инструкции кажутся понятными, поэтому я попытался включить плагин Deprofanizer, изменив конфигурацию plugins на:

    plugins: plugins/Deprofanizer.hs

в соответствии с предложенным примером. (Deprofanizer предоставляется с gitit в качестве примера.)

Это почти работает. Когда я запускаю gitit, он находит модуль Deprofanizer там, где я ожидаю, и пытается его скомпилировать. Но:

Loading plugin 'plugins/Deprofanizer.hs'...

plugins/Deprofanizer.hs:6:1: error:
    Could not find module ‘Network.Gitit.Interface’
    Use -v to see a list of the files searched for.
  |
6 | import Network.Gitit.Interface
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gitit: Error loading plugin: plugins/Deprofanizer.hs

Модуль Network.Gitit.Interface действительно является частью дистрибутива Gitit, и я предполагаю, что он скомпилирован в мой исполняемый файл gitit. Но я не знаю, почему плагин не может импортировать его или как это исправить. Я не могу найти подсказки в руководстве, что это может быть проблемой.

Я нашел код ( в Network.Gitit.Plugins, ответственный за загрузку и компиляцию модуля плагина:

    loadPlugin pluginName = do
      logM "gitit" WARNING ("Loading plugin '" ++ pluginName ++ "'...")
      runGhc (Just libdir) $ do
          ...

и дал ему указание записать значение libdir, которое составляет /home/mjd/.stack/programs/x86_64-linux/ghc-8.6.5/lib/ghc-8.6.5. Этот каталог существует, но я не знаю, что с ним делать.

Итак, еще раз, вопрос:

Как это исправить?

...