【发布时间】: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