一夜之间的黑客攻击,试图创建一个环境,GAE代码(使用Python库/包)可以很容易地移植到Heroku,只需要很少的编辑。
修改
问:YAML只提供3行代码提供静态文件共享,我试图找出如何使用_minimal_editing_(关键字)实现此文件共享。
例如,要共享'static /'文件夹。一种解决方案是实现http://docs.webob.org/en/latest/file-example.html中的一些类 - 不是一个优雅的答案。
重要的是让开发人员可以自由选择(希望)更好/更便宜的云提供商,按照步骤1,2,3 ......并且应用程序将以最小的麻烦启动并运行。希望这能消除困惑。
如果有人询问,我的代码如下......
“ main.py ”文件:
import jinja2
import webapp2
import os
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(
os.path.join(os.path.dirname(__file__), 'templates')))
class HelloWebapp2(webapp2.RequestHandler):
def get(self):
template_values = { 'test': 'Hello World!!'}
template = jinja_environment.get_template('jinja2_test.html')
return self.response.out.write(template.render(template_values))
app2 = webapp2.WSGIApplication([
('/', HelloWebapp2)
], debug=True)
def main():
from paste import httpserver
port = int(os.environ.get("PORT", 5000))
httpserver.serve(app2, host='0.0.0.0', port=port)
if __name__ == '__main__':
main()
在“ requirements.txt ”文件中:
Jinja2==2.6
webapp2==2.3
paste==1.7.5.1
webob==1.1.1
输出文件“ templates / jinja2_test.html ”:
{{test}}
默认“ procfile ”:
web: python main.py
答案 0 :(得分:1)
听起来我觉得你要解决的问题是在Heroku上使用Django提供静态页面。
collectstatic似乎是对此的正确答案: web:python my_django_app / manage.py collectstatic --noinput; bin / gunicorn_django --workers = 4 --bind = 0.0.0.0:$ PORT my_django_app / settings.py
http://matthewphiong.com/managing-django-static-files-on-heroku
答案 1 :(得分:1)
在heroku平台上,对于大批量应用,您应该使用amazon s3进行静态资产存储:https://devcenter.heroku.com/articles/s3
出于开发目的,我创建了一个简单的" catch all"处理程序(它应该是列表中的最后一个处理程序),它提供以项目目录中某些后缀结尾的静态文件。添加这个很简单。但请记住,它不是很有效,而且浪费了网络动力资源。
import webapp2
import re
import os
class FileHandler(webapp2.RequestHandler):
def get(self,path):
if re.search('html$',path):
self.response.headers['Content-Type'] = 'text/html'
elif re.search('css$',path):
self.response.headers['Content-Type'] = 'text/css'
elif re.search('js$',path):
self.response.headers['Content-Type'] = 'application/javascript'
elif re.search('gif$',path):
self.response.headers['Content-Type'] = 'image/gif'
elif re.search('png$',path):
self.response.headers['Content-Type'] = 'image/png'
else:
self.abort(403)
try:
f=open("./"+path,'r')
except IOError:
self.abort(404)
self.response.write(f.read())
f.close
app = webapp2.WSGIApplication([
(r'/(.*)', FileHandler),
], debug=True)
def main():
from paste import httpserver
port = int(os.environ.get('PORT', 8080))
httpserver.serve(app, host='0.0.0.0', port=port)
if __name__ == '__main__':
main()