【问题标题】:permissions issue when running bokeh server from supervisor从主管运行散景服务器时的权限问题
【发布时间】:2015-12-28 13:18:46
【问题描述】:

我有一个使用bokeh 绘图引擎的网络应用程序。我根据他们的“Stocks Example”创建了一个交互式绘图应用程序

我让它在我的开发机器上成功运行。在我的应用服务器上,我正在运行来自 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 的组ID(我的webdev 用户基本上运行所有东西),尽管os.expanduser('~') 显示用户为root。

supervisor 配置 sn-ps 见下文。

[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
...

webapp 使用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
...

来自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 程序块中,但无济于事。我已经从 supervisor.conf 配置中删除了 user=webdev redis

【问题讨论】:

    标签: python flask permissions supervisord bokeh


    【解决方案1】:

    我最终制作了自己的 app_document 装饰器(参见 stock_app 示例),它允许我创建一个多用户 bokeh session 并传入一个配置目录,因为这是引发错误的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 2018-07-08
      • 2014-05-18
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多