2015-09-30 3 views
1

У меня есть веб-приложение, в котором используется механизм построения 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

ответ

0

Я в конечном итоге сделать свой собственный app_document декоратор (см пример stock_app), что позволило мне создать многопользовательский bokeh session и перейти в каталог конфигурации, так как именно там Ошибка.

Смежные вопросы