FIWARE Wirecloud Bug; <custom theme =“”>不是有效的WireCloud主题

时间:2016-05-17 12:34:20

标签: fiware fiware-wirecloud

我们在自己的服务器上安装了Wirecloud,使用Docker Hub上的Docker镜像(最新版本= 0.9.1)。 使用此处的说明:https://wirecloud.readthedocs.io/en/latest/development/platform/themes/我们尝试遵循基本主题&#39;部分。但目前尚不清楚主题应放在文件系统上的哪个位置。

 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

我们收到错误:

  

...文件&#34; /usr/local/lib/python2.7/site-packages/wirecloud/platform/themes.py",第82行,在get_theme_metadata&#39;      引发ValueError(&#34;%s不是有效的WireCloud主题&#34;%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拿起我们的自定义主题?

2 个答案:

答案 0 :(得分:1)

我已按照您的步骤进行操作,但我没有收到您报告的错误。我使用了一个干净的容器和一个script来回复您的步骤:

$ 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 with the theme applied

无论如何,很明显WireCloud在尝试加载无效/缺失主题时未能提供良好的错误消息,因此我创建了ticket来修复改进这些情况。我们还更新了有关如何创建新主题的文档,并在docker image docs中添加了一些部分。考虑到泊坞窗图像在/opt/wirecloud_instance创建了一个志愿者,所以尽管您通过将主题放入/usr/local/lib/python2.7/site-packages/解决了问题,但最佳位置是/opt/wirecloud_instance/babblerTheme

感谢您抽出宝贵时间使用WireCloud并报告这些问题:)。

注意

  

从不修改由site-packages和标准python包创建的dist-packagesvirtualenv文件夹。这些文件夹无意手动编辑,如果您升级或删除WireCloud,您的更改将会丢失(例如,使用pip)。

     

此外,如果您使用docker执行此操作,则在删除新版本的WireCloud图像后,您将丢失所做的任何更改。

答案 1 :(得分:0)

解决!!

第1步

wirecloud需要你以/ pyr dot分隔文件名格式在/usr/local/lib/python2.7/site-packages/之后添加所有内容。

因此,如果您的自定义主题位于/usr/local/lib/python2.7/site-packages/wirecloud/mytheme目录

然后settings.py需要输入:THEME_ACTIVE =“wirecloud.mytheme” 使用wirecloud在启动时获取mytheme主题。

第2步

确保命令python manage.py collectstatic --noinput在启动时执行,就在重新启动apache webserver之前。我通过更改docker-entrypoint.sh启动文件在我的自定义docker镜像中完成了此操作,如下所示:

#!/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开发人员,请更新文档,如果只是使用在docker镜像上执行微小更改的日志文件。这太痛苦了!