简体   繁体   English

使用Django直接从Heroku提供静态媒体服务

[英]Serving static media directly from heroku with Django

Due to not being able to store TinyMCE js files on my S3 bucket due to origin problems i'm trying to get Heroku to serve them up. 由于起源问题,由于无法将TinyMCE js文件存储在S3存储桶中,因此我试图让Heroku为它们提供服务。

Here's what I've attempted so far but no luck. 到目前为止,这是我尝试过的,但是没有运气。 The browser url looks good ( http://www.mysite.com/media/js/tiny_mce/tiny_mce.js ) but heroku doesn't serve them up and returns a 404. 浏览器的URL看起来不错( http://www.mysite.com/media/js/tiny_mce/tiny_mce.js ),但是heroku没有提供它们,并返回404。

Here's my code: 这是我的代码:

Settings.py Settings.py

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'
TINYMCE_JS_URL = MEDIA_URL + 'js/tiny_mce/tiny_mce.js'
TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tiny_mce'

urls.py urls.py

 urlpatterns += patterns('',
       (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_URL}))
    urlpatterns += patterns('',
       (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))

I can serve static assets directly from heroku using following code: 我可以使用以下代码直接从heroku提供静态资产:

settings.py: settings.py:

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/media/'
TINYMCE_JS_URL = MEDIA_URL + 'js/tiny_mce/tiny_mce.js'
TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tiny_mce'

urls.py: urls.py:

urlpatterns = patterns('',
    ...
    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True, }),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True, }),
)

base.html: base.html文件:

<script type="text/javascript" src="{{ MEDIA_URL }}js/tiny_mce/tiny_mce.js"></script>

<script type="text/javascript">
    tinyMCE.init({
    mode: "textareas",
    theme: "advanced",
    forced_root_block: false,
    force_p_newlines : false,
    force_br_newlines : true,
});
</script>

Ok got it working using the comments in a github discussion https://github.com/aljosa/django-tinymce/pull/15 使用github讨论中的评论可以让它正常工作https://github.com/aljosa/django-tinymce/pull/15

Primarily I changed the urls.py: 首先,我更改了urls.py:

 urlpatterns += patterns('',
       (r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': '/app/.heroku/python/lib/python2.7/site-packages/tinymce/static/'}))

I've got a feeling this could be much better resolved but i'm out of ideas and this works 我感觉这可以更好地解决,但是我没有主意,这可行

For Django >= 2.0.0, For serving MEDIA_URL directly from heroku you can use 对于Django> = 2.0.0,要直接从heroku提供MEDIA_URL ,可以使用

from django.urls import include, path, re_path
from django.views.static import serve


urlpatterns = [
...
re_path(r'^media/(?P<path>.*)$', serve,
        kwargs=dict(document_root=settings.MEDIA_ROOT)),
]

Remember, heroku removes MEDIA_ROOT folder with every deploy. 记住,heroku每次部署都会删除MEDIA_ROOT文件夹。

More info https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted 更多信息https://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM