【问题标题】:Moving to production environment broke my application迁移到生产环境破坏了我的应用程序
【发布时间】:2012-01-25 12:19:44
【问题描述】:

我刚刚在 Dreamhost 上部署了我的应用程序,上传文件时它停止工作。乘客只会产生 500 内部错误。它适用于我的开发设置。
我的乘客档案如下:

import sys, os
sys.path.append(os.getcwd())
sys.path.append(os.path.join(os.getcwd(), '/photosoc'))

os.environ['DJANGO_SETTINGS_MODULE'] = "photosoc.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

我得到标准的 404 错误(调试仍然启用)。我不得不更改我的 urls 文件:

from django.conf.urls.defaults import patterns, include, url
from competition.models import Image
from competition import *
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
admin.site.register(Image)

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'photosoc.views.home', name='home'),
    # url(r'^photosoc/', include('photosoc.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
#   url(r'^image/$', 'competition.views.index'),
    url(r'^image/uploadImage', 'competition.views.uploadImage'),
    url(r'^image/uploadCompleted', 'competition.views.uploadCompleted'),
    url(r'^image/uploadFailed', 'competition.views.uploadFailed'),
)

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

致以下:

from django.conf.urls.defaults import patterns, include, url
from competition.models import Image
from competition import *
from django.contrib import admin
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
admin.site.register(Image)

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'photosoc.views.home', name='home'),
    # url(r'^photosoc/', include('photosoc.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
#   url(r'^image/$', 'competition.views.index'),
    url(r'^image/uploadImage', 'competition.views.uploadImage'),
    url(r'^image/uploadCompleted', 'competition.views.uploadCompleted'),
    url(r'^image/uploadFailed', 'competition.views.uploadFailed'),
)

这是我对应用程序从开发切换到生产所做的唯一更改。那么还有什么问题呢?

【问题讨论】:

  • 在dreamhost 上您可以访问您的网络服务器日志吗?如果它产生 500 那么错误应该记录在某处?
  • 您应该尝试访问服务器日志,以便您可以阅读堆栈跟踪(并在此处发布)。它会让您更好地了解问题可能是什么
  • 如果您无权访问日志,则应在设置中设置管理员电子邮件地址。然后,当您未处于调试模式时,应用程序应通过电子邮件将错误堆栈发送给您。无论如何你都应该这样做。

标签: django dreamhost


【解决方案1】:

您可能有权限问题。

您似乎正在编写图像文件。运行 Django 的进程是否有写文件的权限?当您使用 ./manage.py runserver 在本地运行 Django 时,Django 将获得从命令行运行的用户的权限,但在典型的生产环境中,您将使用 Apache 用户的权限运行。此用户可能没有写入这些图像文件的权限。您可以尝试将写入目录临时硬编码到 /tmp 以查看是否有所不同。

当然,您确实需要查看 500 错误堆栈跟踪才能知道发生了什么。

【讨论】:

    【解决方案2】:

    您导入的中间件类中的设置是否完全相同?仔细检查这些是否相同。

    相关:

    ModSecurity: Output filter: Failed to read bucket (rc 104): Connection reset by peer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2020-11-29
      相关资源
      最近更新 更多