我们在自己的服务器上安装了Wirecloud,使用Docker Hub上的Docker镜像(最新版本= 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拿起我们的自定义主题?
答案 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在尝试加载无效/缺失主题时未能提供良好的错误消息,因此我创建了ticket来修复改进这些情况。我们还更新了有关如何创建新主题的文档,并在docker image docs中添加了一些部分。考虑到泊坞窗图像在/opt/wirecloud_instance
创建了一个志愿者,所以尽管您通过将主题放入/usr/local/lib/python2.7/site-packages/
解决了问题,但最佳位置是/opt/wirecloud_instance/babblerTheme
。
感谢您抽出宝贵时间使用WireCloud并报告这些问题:)。
从不修改由
site-packages
和标准python包创建的dist-packages
和virtualenv
文件夹。这些文件夹无意手动编辑,如果您升级或删除WireCloud,您的更改将会丢失(例如,使用pip
)。此外,如果您使用docker执行此操作,则在删除新版本的WireCloud图像后,您将丢失所做的任何更改。
答案 1 :(得分:0)
解决!!
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主题。
确保命令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镜像上执行微小更改的日志文件。这太痛苦了!