OS X Django/Apache 应用程序不提供媒体文件,可以使用 python shell
OS X Django/Apache app not serving media files, works using python shell
我有一个简单的 Django 应用程序,可以显示一堆视频缩略图。应用程序做的第一件事是找到 MEDIA_ROOT
中的所有缩略图文件。其他一切都从那里滴下来。我已经让 apache 正确地为我的站点提供服务,但是它无法在我的 media_root 中找到文件。
views.py:
def index(request):
def walk_dir_tree(path, file_type):
return[os.path.basename(x) for x in glob.glob(path + file_type,
recursive=True)]
# Gets all .jpgs in media_root
all_thumb_files = sorted(walk_dir_tree(
settings.MEDIA_ROOT + 'thumbnails/**/*', '.jpg'), reverse=True)
...
return HttpResponse(template.render(context, request))
相关信息来自settings.py:
# URLs
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
# Root Dirs:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
# Dev
MEDIA_ROOT = '/Users/user/Documents/temp/secureDash/'
http-vhosts.conf:
<VirtualHost *:80>
LogLevel debug
ServerName securedash
ServerAdmin <email>
Alias /static /Users/user/icloud/projects/secureDash/static
<Directory /Users/user/icloud/projects/secureDash/static>
Require all granted
</Directory>
Alias /media /Users/user/Documents/temp/secureDash
<Directory /Users/user/Documents/temp/secureDash>
Require all granted
</Directory>
<Directory /Users/user/icloud/projects/secureDash/secureDash>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess securedash python-path=/Users/user/icloud/projects/secureDash/secureDash python-home=/Users/user/Documents/VirtualEnvs/securedash
WSGIProcessGroup securedash
WSGIScriptAlias / /Users/user/icloud/projects/secureDash/secureDash/wsgi.py
</VirtualHost>
作为确保我的媒体路径正确的测试,我写了一个快速脚本并 运行 它在 python3 shell:
MEDIA_ROOT = '/Users/user/Documents/temp/secureDash/'
def walk_dir_tree(path, file_type):
return[os.path.basename(x) for x in glob.glob(path + file_type,
recursive=True)]
all_thumb_files = sorted(walk_dir_tree(
MEDIA_ROOT + 'thumbnails/**/*', '.jpg'), reverse=True)
# prints a list of all jpgs
print(walk_dir_tree('/Users/user/Documents/temp/secureDash/thumbnails/**/*', '.jpg'))
# also prints a list of all jpgs
print(all_thumb_files)
没有任何错误记录。每次都是 returns 一个空列表。我认为这可能是我的 settings.py 或 apache 配置的问题,但我尝试了多种组合但没有任何效果。
我在 raspberry pi 上的 "production" 服务器上使用了这个确切的配置。我只是想建立一个更接近生产环境的开发环境。唯一的区别是操作系统和 MEDIA_ROOT
位置。
Django 1.10 | OSX 10.11 埃尔卡皮坦 |阿帕奇 2.4
这最终成为 /Users/user/Documents/temp/secureDash/
的权限问题,但帮助我解决这个问题的是 @mithuntnt 提出的 glob 不同文件夹的建议。所以我回去并搜索了 /Users/user/Documents
,结果是 return。然后添加 /temp
得到 returned 结果。然后/secureDash
里面没有。我在 /temp
中尝试了与 /secureDash
处于同一级别的不同目录并且有效。所以我检查了 /secureDash
的权限,它是:
17276808 drwx------@ 6 user _www 204B Mar 29 15:04 secureDash
所以我运行chmod -R 755 /Users/user/Documents/temp/secureDash/
现在正在加载缩略图。我不应该在 apache 日志中看到文件权限错误吗?我在 http-vhosts.conf 中有 LogLevel debug
。什么是开发环境的良好 LogLevel 设置?
我有一个简单的 Django 应用程序,可以显示一堆视频缩略图。应用程序做的第一件事是找到 MEDIA_ROOT
中的所有缩略图文件。其他一切都从那里滴下来。我已经让 apache 正确地为我的站点提供服务,但是它无法在我的 media_root 中找到文件。
views.py:
def index(request):
def walk_dir_tree(path, file_type):
return[os.path.basename(x) for x in glob.glob(path + file_type,
recursive=True)]
# Gets all .jpgs in media_root
all_thumb_files = sorted(walk_dir_tree(
settings.MEDIA_ROOT + 'thumbnails/**/*', '.jpg'), reverse=True)
...
return HttpResponse(template.render(context, request))
相关信息来自settings.py:
# URLs
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
# Root Dirs:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
# Dev
MEDIA_ROOT = '/Users/user/Documents/temp/secureDash/'
http-vhosts.conf:
<VirtualHost *:80>
LogLevel debug
ServerName securedash
ServerAdmin <email>
Alias /static /Users/user/icloud/projects/secureDash/static
<Directory /Users/user/icloud/projects/secureDash/static>
Require all granted
</Directory>
Alias /media /Users/user/Documents/temp/secureDash
<Directory /Users/user/Documents/temp/secureDash>
Require all granted
</Directory>
<Directory /Users/user/icloud/projects/secureDash/secureDash>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess securedash python-path=/Users/user/icloud/projects/secureDash/secureDash python-home=/Users/user/Documents/VirtualEnvs/securedash
WSGIProcessGroup securedash
WSGIScriptAlias / /Users/user/icloud/projects/secureDash/secureDash/wsgi.py
</VirtualHost>
作为确保我的媒体路径正确的测试,我写了一个快速脚本并 运行 它在 python3 shell:
MEDIA_ROOT = '/Users/user/Documents/temp/secureDash/'
def walk_dir_tree(path, file_type):
return[os.path.basename(x) for x in glob.glob(path + file_type,
recursive=True)]
all_thumb_files = sorted(walk_dir_tree(
MEDIA_ROOT + 'thumbnails/**/*', '.jpg'), reverse=True)
# prints a list of all jpgs
print(walk_dir_tree('/Users/user/Documents/temp/secureDash/thumbnails/**/*', '.jpg'))
# also prints a list of all jpgs
print(all_thumb_files)
没有任何错误记录。每次都是 returns 一个空列表。我认为这可能是我的 settings.py 或 apache 配置的问题,但我尝试了多种组合但没有任何效果。
我在 raspberry pi 上的 "production" 服务器上使用了这个确切的配置。我只是想建立一个更接近生产环境的开发环境。唯一的区别是操作系统和 MEDIA_ROOT
位置。
Django 1.10 | OSX 10.11 埃尔卡皮坦 |阿帕奇 2.4
这最终成为 /Users/user/Documents/temp/secureDash/
的权限问题,但帮助我解决这个问题的是 @mithuntnt 提出的 glob 不同文件夹的建议。所以我回去并搜索了 /Users/user/Documents
,结果是 return。然后添加 /temp
得到 returned 结果。然后/secureDash
里面没有。我在 /temp
中尝试了与 /secureDash
处于同一级别的不同目录并且有效。所以我检查了 /secureDash
的权限,它是:
17276808 drwx------@ 6 user _www 204B Mar 29 15:04 secureDash
所以我运行chmod -R 755 /Users/user/Documents/temp/secureDash/
现在正在加载缩略图。我不应该在 apache 日志中看到文件权限错误吗?我在 http-vhosts.conf 中有 LogLevel debug
。什么是开发环境的良好 LogLevel 设置?