FIWARE Ошибка Wirecloud; ‹пользовательская тема› не является допустимой темой WireCloud

У нас установлен Wirecloud на нашем собственном сервере с использованием образа Docker на Docker Hub (последняя версия = 0.9.1). Используйте инструкции здесь: https://wirecloud.readthedocs.io/en/latest/development/platform/themes/ мы попытались следовать разделу «Основные темы». Но не понятно, где тема должна быть размещена в файловой системе.

 1. created the directory structure in the example 
 2. created a file __init__.py with one line: parent = "wirecloud.defaulttheme" 
 3. created a file _variables.scss and pasted the example into it. Put the file in babblerTheme/static/css/ 
 4. created a header.png image and placed it in babblerTheme/static/images/logos/ 
 5. Then updated settings.py with the name of our basic theme with the setting: THEME_ACTIVE = "babblerTheme" 
 6. Then ran python manage.py collectstatic --noinput

получаем ошибку:

...Файл "/usr/local/lib/python2.7/site-packages/wirecloud/platform/themes.py", строка 82, в get_theme_metadata' поднять ValueError("%s не является допустимой темой WireCloud" % theme_name ) ValueError: babblerTheme не является допустимой темой WireCloud

Мы безуспешно пытались поместить каталог темы в следующие места:

/opt/wirecloud_instance/wirecloud_instance/babblerTheme
/opt/wirecloud_instance/babblerTheme
/usr/local/lib/python2.7/site-packages/wirecloud/babblerTheme

Во всех трех местах одна и та же неинформативная ошибка.

Это должно быть очень легко, но я уже потратил на это больше половины дня. Я могу обойти эту ошибку, изменив содержимое темы по умолчанию, но я ожидаю, что это приведет к проблемам при обновлении Wirecloud.

Что мы должны сделать, чтобы Wirecloud подхватил нашу пользовательскую тему?


person Robin    schedule 17.05.2016    source источник
comment
Скопировал каталог /usr/local/lib/python2.7/site-packages/wirecloud/defaulttheme в /usr/local/lib/python2.7/site-packages/wirecloud/babblerTheme. Затем обновил settings.py с настройкой: THEME_ACTIVE = wirecloud.babblerTheme. Это, кажется, заставляет вещи происходить. Но только после выполнения python manage.py collectstatic --noinput и перезапуска сервера с помощью перезапуска apachectl. Позже попробую с минимальной темой.   -  person Robin    schedule 17.05.2016


Ответы (2)


Я выполнил ваши шаги, и они работают, я не получаю ошибку, о которой вы сообщали. Я использовал чистый контейнер и один скрипт для ответа на ваши шаги:

$ docker run -dP --name wirecloud_test_latest fiware/wirecloud:latest
47ca7b90c7bf85401eeb7bd4c915d560eb9d2bdcb543fb365fa900934a10812f

$ docker cp test_script.sh wirecloud_test_latest:/opt/wirecloud_instance/test_script.sh

$ docker exec -it wirecloud_test_latest /bin/bash
root@47ca7b90c7bf:/opt/wirecloud_instance# su wirecloud
wirecloud@47ca7b90c7bf:/opt/wirecloud_instance# bash test_script.sh
.....
wirecloud@47ca7b90c7bf:/opt/wirecloud_instance# exit
root@47ca7b90c7bf:/opt/wirecloud_instance# apache2ctl graceful
root@47ca7b90c7bf:/opt/wirecloud_instance# exit

Результат:

WireCloud с примененной темой

В любом случае, ясно, что WireCloud не смог предоставить хорошее сообщение об ошибке при попытке загрузить недопустимые/отсутствующие темы, поэтому я создал тикет, чтобы исправить эти случаи. Мы также обновили документацию о том, как создавать новые темы, и добавили несколько разделов в ссылку документы об образах Docker. Учтите, что образы докеров создают том в /opt/wirecloud_instance, поэтому, хотя вы решили свои проблемы, поместив тему в /usr/local/lib/python2.7/site-packages/, лучшим местом будет /opt/wirecloud_instance/babblerTheme.

Спасибо, что уделили время использованию WireCloud и сообщили об этих проблемах :).

Примечание

Никогда не изменяйте папки site-packages и dist-packages, созданные virtualenv, и стандартные пакеты Python. Эти папки не предназначены для редактирования вручную, и ваши изменения будут потеряны, если вы обновите или удалите WireCloud (например, с помощью pip).

Более того, если вы сделаете это с помощью докера, вы потеряете все изменения, сделанные после загрузки новой версии образа WireCloud.

person Álvaro Arranz    schedule 19.05.2016
comment
Подозреваю, что теперь тема называется wirecloud. перед ним и команда python 'python /opt/wirecloud_instance/manage.py collectstatic --noinput' находится в файле точки входа, это также сработает для меня, но у меня еще не было времени для тестирования. Будет обновляться, когда это произойдет. Тем временем мы все еще пытаемся выяснить, какие файлы шаблонов используются на самом деле, для чего я напишу отдельный тикет. - person Robin; 25.05.2016
comment
Попытка выяснить, какие шаблоны используются, находится здесь: файлы шаблонов фактически используются"> stackoverflow.com/questions/37434978/ - person Robin; 25.05.2016

Решено!!

Шаг 1

wirecloud требует, чтобы вы добавили все после /usr/local/lib/python2.7/site-packages/ в формате имени файла, разделенного точками python.

Итак, если ваша пользовательская тема находится в каталоге /usr/local/lib/python2.7/site-packages/wirecloud/mytheme

затем в settings.py требуется запись: THEME_ACTIVE = "wirecloud.mytheme", чтобы wirecloud подбирал тему mytheme при запуске.

Шаг 2

Убедитесь, что команда python manage.py collectstatic --noinput выполняется при запуске, непосредственно перед перезапуском веб-сервера apache. Я достиг этого в своем пользовательском образе докера, изменив файл запуска docker-entrypoint.sh следующим образом:

#!/bin/bash

sed -i "s/SECRET_KEY = 'TOCHANGE_SECRET_KEY'/SECRET_KEY = '$(python -c "from django.utils.crypto import get_random_string; import re;  print(re.escape(get_random_string(50, 'abcdefghijklmnopqrstuvwxyz0123456789%^&*(-_=+)')))")'/g" /opt/wirecloud_instance/wirecloud_instance/settings.py

echo ===> migrating python modules with python manage.py migrate
python /opt/wirecloud_instance/manage.py migrate # Apply database migrations
python /opt/wirecloud_instance/manage.py collectstatic --noinput # Collect static files

# Start apache processes in foreground
/usr/sbin/apache2ctl graceful-stop
exec /usr/sbin/apache2ctl -D FOREGROUND

Примечание: важен порядок команд Python. Строка с collectstatic должна выполняться последней, в противном случае статические ресурсы НЕ передаются браузерам.

Разработчики Wirecloud, пожалуйста, обновите документацию, хотя бы с лог-файлом внесения незначительных изменений в образ докера. Это было слишком больно!

person Robin    schedule 17.05.2016
comment
Привет, Робин, я должен проанализировать твой ответ, и мы обновим документацию. - person Álvaro Arranz; 19.05.2016