Ошибка Graphviz, нарушающая алгоритм построения схемы db

Я использую Schemaspy (v5.0) для диаграммы mySQL (v5.7.11), используя Graphviz через Homebrew на моем Mac (El Capitan). Недавнее обновление Graphviz (v2.40.1), по-видимому, нарушило способность Schemaspy генерировать реляционные диаграммы.

Writing/graphing summary.....org.schemaspy.util.Dot$DotFailure: 'dot -Tpng:gd 
/Tools/docs/data/project/diagrams/summary/relationships.real.compact.dot 
-o/Tools/docs/data/project/diagrams/summary/relationships.real.compact.png 
-Tcmapx' 
failed with return code 139

Чтобы решить эту проблему, я попытался:

  • удалить/переустановить graphviz
  • downgrade Graphviz (v2.38 - это была единственная версия, которую я мог найти, и у доморощенного тоже не было более старых версий), но она закрыла мою установку
  • попытался запустить компьютер коллеги с одинаковыми результатами
  • попробовал новую бета-версию schemaspy (v6.0-beta3)
  • поиск по форумам graphviz (страница разбилась), stackoverflow и общий поиск google.

Глядя на то, как это сделать снова.


[Изменить] Я не нашел решения, почему SchemaSpy/Graphviz перестала работать (или означала wtf "код 139" ), но я использовал обходной путь.

  • Установить Docker
  • Получить mnuessler/schemaspy или подобное с hub.docker.com
  • откройте том для вашего хоста - он будет использоваться в команде docker
  • выполните приведенную ниже команду

docker run -it --rm -v /docs/data:/data mnuessler/schemaspy -hq -t mysql -host localhost -u root -p root -db things -o /data/leads

где -v - это объем, который вы открыли на своем хосте, и -o/data/... где вывод будет отображаться после запуска

Ответ 1

По умолчанию SchemaSpy ожидает, что исполняемый файл точки находится в переменной среды PATH. Используйте эту опцию, чтобы явно указать, где установлен Graphviz.

Если вы не хотите добавлять его в PATH, вы можете использовать параметр -gv и указать путь к месту установки Graphviz.

Обновление

  • Если вы используете GraphViz версии 2.40.1 в версии OS X, более старой, чем High Sierra, добавьте -renderer :quartz в командную строку.
  • Если вы используете GraphViz версии 2.40.1 в OS X версии High Sierra или новее, добавьте -renderer :cairo в командную строку.

Ответ 3

Если вы работаете в macOs HighSierra, правильный вызов выполняется без средства визуализации и (пере) установите Graphviz с помощью:

brew reinstall graphviz --with-librsvg --with-pango

Ответ 4

Я попробовал вышеупомянутые методы, но это не работало для меня.

Работая на mojave, я не смог заставить работать установку brew (из-за отсутствия библиотек pango). Возможно, это будет обновлено в будущем, но на момент написания этой статьи мне пришлось переключиться на установку Macports, и это сработало для меня.

Также работает schemaspy 6.0.0 и Graphviz 2.40.1.

Ответ 5

Обновление для этого вопроса. Homebrew недавно внес изменения в добавление опций при установке пакета... они больше этого не позволяют. :)

https://brew.sh/2019/02/02/homebrew-2.0.0/

Было предложено использовать brew edit graphviz и добавить туда нужные аргументы. Я пытаюсь это сейчас.

Ответ 6

Версия 6.1.0 SchemaSpy удалила зависимость от GraphViz, поэтому вы можете избежать этой проблемы, используя эту версию.


Версия 6.1.0 еще не выпущена, но вы можете загрузить снимок. Эта версия включает реализацию GraphViz на JavaScript, которую можно использовать вместо поиска GraphViz в PATH.

Я не уверен, используется ли версия JavaScript по умолчанию, но вы можете вызвать это поведение, указав аргумент -vizjs, например,

java -jar ./schemaspy-6.1.0-SNAPSHOT.jar -vizjs -t pgsql -o output 
    -host localhost -port 5432 -s public -db my_db -u root -p password 
    -dp jdbc/postgresql-42.2.6.jar