Я создаю сайт с использованием OpenShift с Tornado, и мне нужно использовать постоянное хранилище для изображений и других файлов. В документации говорится, какой постоянный путь хранения хранится в $ OPENSHIFT_DATA_DIR. Вот обзор приложения Файловая система:Как загружать загруженные изображения в OpenShift Tornado?
|-- app-root
| -- data # <--$OPENSHIFT_DATA_DIR
| -- repo #
| -- wsgi
| -- static
| -- img
| -- templates
| -- ...
| -- runtime
| -- data
| -- repo
| -- ...deployed application code
А вот у меня есть проблема: Я пытался использовать изображения и другие файлы с $ OPENSHIFT_DATA_DIR, но это не работает, я всегда получаю 404, потому что $ OPENSHIFT_DATA_DIR размещен вне wsgi путь. Я основал то, что я не один, и Django/Java/Flask разработчиками, использующими OpenShift, с теми же проблемами.
Я попытался обслуживать файлы из/статической папки, но это была плохая идея: при создании git push
удалятся все новые файлы, созданные здесь.
Я попытался сделать что-то вроде this, но он не работает тоже для меня. Может быть, я что-то делаю неправильно, и мне нужно переписать что-то еще, чтобы использовать этот трюк для Tornado?
Может кто-нибудь мне помочь? Благодаря!
EDIT
Пытались использовать tornado.web.StaticFileHandler
, добавьте его обработчики, как это:
__UPLOADS__ = str(os.environ.get('OPENSHIFT_DATA_DIR'))+"/uploads" ...
handlers = [(r'/',MainHandler,),
(r'/media/(.*)', tornado.web.StaticFileHandler, {'path': __UPLOADS__}),
...,]
Найди то, что этот путь Торнадо заменить __UPLOADS__+/media/img.jpg
на wsgi/static/img.jpg
Вот файл приложения, может быть, это может сделать что-то ясно:
#!/usr/bin/env python
import os
import sys
if 'OPENSHIFT_REPO_DIR' in os.environ:
sys.path.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi',))
virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/venv'
os.environ['PYTHON_EGG_CACHE'] = os.path.join(virtenv, 'lib/python3.3/site-packages')
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
exec(compile(open(virtualenv).read(), virtualenv, 'exec'),dict(__file__ = virtualenv))
except IOError:
pass
import tornado.wsgi
from openshift import handlers
if 'OPENSHIFT_REPO_DIR' in os.environ:
settings = {
'cookie_secret': 'TOP_SECRET',
'template_path' : os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi/templates'),
'xsrf_cookies': True,
'debug': True,
'login_url': '/login',
}
else:
settings = {
'cookie_secret': 'TOP_SECRET',
'template_path' : os.path.join(os.getcwd(), 'wsgi/templates'),
'xsrf_cookies': True,
'debug': True,
'login_url': '/login',
}
application = tornado.wsgi.WSGIApplication(handlers, **settings)
Если вы используете Tornado, это означает, что вы предоставили файл app.py. Это отключает использование Apache/mod_wsgi, поэтому статический каталог не используется. Вам нужно будет найти какой-то код специально для фреймворка TornadoWeb, который может обслуживать статические файлы через ваш код Python. Например, http://stackoverflow.com/questions/10165665/using-tornado-how-do-i-serve-static-files-and-serve-a-favicon-ico-from-a-differ –
У меня есть обработчики прав доступа например: '__UPLOADS__ = str (os.environ.get ('OPENSHIFT_DATA_DIR')) +"/uploads " ... обработчики = [(r '/', MainHandler,), (r '/ media/(. *) ', tornado.web.StaticFileHandler, {' path ': __UPLOADS__}), ... ' Теперь торнадо перенаправляет его на'/static/2431aa15-61b2-4de6-9d71-6009bbcc4bf3.jpg', но не '/ uploads'. И 404 снова – ashchuk
Сначала вы создали каталог '' uploads''? –