У меня есть веб-приложение, в котором используется механизм построения bokeh
. Я создал интерактивное приложение для построения графиков из их «Stocks Example»Разрешения при запуске сервера bokeh от супервизора
У меня он успешно работает на моей машине разработки. На моем сервере приложений я запускаю все от supervisor
(supervisorctl
).
Я использую redis
как бэкэнд.
У меня проблема с разрешениями, основанная на том, кто «управляет» различными приложениями. Когда я пытаюсь получить доступ к приложению на сервере, моя трассировка показывает проблему разрешения на создание каталога.
Traceback (most recent call last):
... flask/wsgi stuff ...
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/flask_login.py", line 755, in decorated_view
return func(*args, **kwargs)
File "/home/webdev/mydevelopment/git/ers_data_app/webapp/mod_performance/plotting_views.py", line 53, in data_viz
bs = make_bokeh_session()
File "/home/webdev/mydevelopment/git/ers_data_app/webapp/mod_performance/plotting_views.py", line 27, in make_bokeh_session
b_session.login(un, pw)
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/bokeh/session.py", line 244, in login
self.save()
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/bokeh/session.py", line 180, in save
data = self.load_dict()
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/bokeh/session.py", line 151, in load_dict
configfile = self.configfile
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/bokeh/session.py", line 148, in configfile
return join(self.configdir, "config.json")
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib/python2.7/site-packages/bokeh/session.py", line 138, in configdir
makedirs(bokehdir)
File "/home/webdev/mydevelopment/git/ers_data_app/env/lib64/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/root/.bokeh'
Я поместил заявление для печати в моем flask
зрения, чтобы показать, кто текущий пользователь (используя os.getegid()
)
from bokeh.session import Session as bSession
...
def make_bokeh_session():
print 'bokeh session group!!!!!!!! {}'.format(os.getegid())
print 'bokeh session user!!!!!!!! {}'.format(os.path.expanduser('~'))
un = current_user.username
pw = current_app.config['BOKEH_SESSION_PW']
b_session = bSession(root_url=bokeh_url, load_from_config=False)
try:
b_session.login(un, pw)
except RuntimeError as e:
b_session.register(un, pw)
b_session.login(un, pw)
output_server('ers_plots')
return b_session
Оператор печати дает показывает идентификатор группы 1000
(мой webdev
пользователь, который работает в основном все), хотя os.expanduser('~')
показывает пользователя как root.
См. Ниже описание фрагментов конфигурации supervisor
.
[program:bokehservergo]
directory = /home/webdev/mydevelopment/git/ers_data_app/webapp/mod_performance
command = /home/webdev/mydevelopment/git/ers_data_app/env/bin/bokeh-server --script=plotting_app.py --backend=redis --no-start-redis -m
user=webdev
...
веб-приложение запускается с uwsgi emperor
[program:uwsgi_emperor_go]
command = /usr/bin/uwsgi --emperor /etc/uwsgi/emperor.ini
user=webdev
...
И REDIS бегуна
[program:redisgo]
command=/usr/bin/redis-server /etc/redis.conf
user=webdev
...
relavent код из bokeh/session.py
(makedirs
фактически бросает отслеживающий)
@property
def configdir(self):
""" filename where our config are stored. """
if self._configdir:
return self._configdir
bokehdir = join(expanduser("~"), ".bokeh")
if not exists(bokehdir):
makedirs(bokehdir)
return bokehdir
Как устранить эту проблему с разрешением, чтобы bokeh
мог быть развернут на сервере? Я попытался добавить user=webdev
в различные программные блоки supervisord
безрезультатно. С тех пор я удалил user=webdev
из supervisor.conf
конфигурации для redis