2014-05-22 17 views
12

Tôi đã triển khai thành công dự án Django của tôi trong openhift. Nhưng tôi cần để có thể phục vụ các tập tin được tải lên bởi người dùng. Tôi sử dụng MEDIA_ROOT và MEDIA_URL cho điều đó. Tôi đã theo dõi this hướng dẫn tại đây, nhưng không có gì xảy ra. Tôi đã phải thay đổi MEDIA_ROOT bởi vì một trong những đề nghị không đúng tôi nghĩ. Vì vậy, MEDIA_ROOT của tôi trông giống nhưDjango phân phát các tập tin media (tập tin người dùng tải lên) trong openshift

MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR', ''),'media') 
MEDIA_URL = '/media/' 

Tôi được thêm vào .htaccess trong thư mục/wsgi với như nó nói trong bài viết

RewriteEngine On 
RewriteRule ^application/media/(.+)$ /static/$1 [L]  

và tạo xây dựng kịch bản để làm cho liên kết tượng trưng của giới truyền thông trong tĩnh như bài báo nói.

#!/bin/bash 
if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then 
    mkdir $OPENSHIFT_DATA_DIR/media 
fi 

ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

Trong urls.py của tôi, tôi đã thêm

urlpatterns += static(settings.MEDIA_ROOT, document_root=settings.MEDIA_URL) 

nhưng tôi vẫn không thể phục vụ họ. Tôi cũng đã cố gắng không bao gồm các phương pháp django tĩnh trong urls.py nhưng kết quả tương tự.

Trong hướng dẫn another .htacces được đặt bên trong thư mục tĩnh. Tôi có làm điều gì sai?

+0

chưa thể giải quyết được vấn đề của tôi ... Mặc dù được mô tả rõ ràng rằng nó hoạt động ... – Apostolos

+0

Mục tiêu là gì? Nếu bạn muốn được phục vụ các tập tin media của Apache bạn không nên sử dụng urlpatterns (chủ yếu là trong sản xuất). Trong trường hợp khác, bạn không nên sử dụng viết lại và liên kết tượng trưng (chủ yếu để phát triển). – tomako

+0

Ghi chú nhỏ. Trên URL của bạn, bạn có urlpatterns + = static (settings.MEDIA_ROOT, document_root = settings.MEDIA_URL) nhưng nó phải là urlpatterns + = tĩnh (settings.MEDIA_URL, DOCUMENT_ROOT = settings.MEDIA_ROOT) Các đối số theo thứ tự ngược –

Trả lời

8

Chỉ cần cho người khác biết, tôi giải quyết vấn đề của tôi bằng cách sửa chữa các RewriteRule thêm thư mục phương tiện truyền thông để phần thứ hai của sự cai trị, vì vậy nó đã trở thành

RewriteEngine On 
RewriteRule ^application/media/(.+)$ /static/media/$1 [L] 

Hy vọng nó sẽ giúp những người khác.

+0

Bạn có thể kiểm tra câu trả lời của riêng bạn như chấp nhận! –

2

Sự cố là url truyền thông của bạn. Các liên kết tượng trưng được tạo ra tại wsgi/tĩnh/phương tiện truyền thông, sau đó cần MEDIA_URL của bạn là MEDIA_URL = '/ static/media /'

Bước đầu tiên, vào xây dựng kịch bản .openshift/action_hooks/xây dựng:

if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then mkdir $OPENSHIFT_DATA_DIR/media fi 

ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media 

Second bước: Trong thiết lập của bạn:

MEDIA_URL = '/static/media/' 

if ON_PAAS: 
    MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR'), 'media') 
else: 
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
1

tôi đã có cùng một vấn đề nhưng Apostolos' giải pháp trên đã không được giải quyết vấn đề này: khi tôi cố gắng để truy cập http://<domain>/media/<file> nó vẫn không hoạt động.

Tuy nhiên, nó hoạt động theo cách khác. nếu tôi cố gắng truy cập vào cùng một tệp như thể nó là tĩnh bằng cách sử dụng http://<domain>/static/media/<file> thì nó hoạt động. Điều này xảy ra ngay cả khi không sử dụng giải pháp của Gpzim98. Tôi nghĩ lý do đơn giản là các tập tin media hiện có thể truy cập thông qua liên kết tượng trưng. Nói cách khác, các tệp phương tiện không được phân phối nhưng giờ đây bạn có thể giả vờ là các tệp tĩnh.

Sẽ rất quan tâm để hiểu những gì đang diễn ra và cách giải quyết đầy đủ vấn đề này (nếu có thể thực hiện được) và có thể phân phát tệp phương tiện trực tiếp thông qua MEDIA_URL.

Cảm ơn

Các vấn đề liên quan