2011-10-03 32 views
1

Django的站點地圖以前的服務器上運行良好,並在我的開發環境中正常工作,但在新服務器上的生產盈虧,與:Django的:sitemap.xml的和「未知時區」

ValidationError:U」未知時區'] (回溯如下)。試圖從管理員訪問我們的某個模型時,我也遇到了類似的錯誤。

更新:

路徑構建/ bdist.linux-x86_64的/蛋/在回溯時區放倒我了,有一些怪異的路徑東西怎麼回事。原來有人從另一臺服務器上覆制了一堆東西,而不是做適當的pip安裝。我刪除了一些舊的庫,修復了virtualenv默認路徑,並且安裝了django-timezones。現在所有的工作都很好。如果這對其他人有幫助,請留下。


站點地圖文件沒有提到有關時區的配置或依賴任何東西: https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/

服務器的時區設置正確美國/洛杉磯,我已經設置在settings.py我一樣我不確定還有什麼可以在這裏看到,谷歌什麼也沒有。

我在urls.py的SiteMaps定義中引用了8個模型,但只有一個BlogSiteMap導致破壞(如果我將它註釋掉破損停止,但我沒有在站點地圖中存在博客文章,它由:

class BlogSitemap(Sitemap): 
    changefreq = "weekly" 
    priority = 0.7 

    def items(self): 
     return Post.objects.filter(status=2).order_by('-modified') 

    def lastmod(self, obj): 
     return obj.modified 

博客文章模型是這樣的(爲了簡潔而稍加編輯)

class Post(models.Model): 
    """Post model.""" 

    title   = models.CharField(_('title'), max_length=200) 
    slug   = models.SlugField(_('slug'), unique_for_date='publish') 
    author   = models.ForeignKey(User, blank=True, null=True) 
    body   = models.TextField(_('body')) 
    tease   = models.TextField(_('tease'), blank=True) 
    status   = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=2) 
    allow_comments = models.BooleanField(_('allow comments'), default=True) 
    fp_show   = models.BooleanField('Show on homepage',default=False) 
    order   = models.IntegerField(blank=True, null=True)  
    publish   = models.DateTimeField(_('publish'),default=datetime.now()) 
    created   = models.DateTimeField(_('created'), auto_now_add=True) 
    modified  = models.DateTimeField(_('modified'), auto_now=True) 
    categories  = models.ManyToManyField(Category, blank=True) 
    tags   = TagField() 
    objects   = PublicManager() 


    def __unicode__(self): 
     return u'%s' % self.title 

    @permalink 
    def get_absolute_url(self): 
     return ('blog_detail', None, { 
      'year': self.publish.year, 
      'month': self.publish.strftime('%b').lower(), 
      'day': self.publish.day, 
      'slug': self.slug 
     }) 

使用: 的Django 1.3 的Python 2.7 RHEL 5.7

謝謝。

Traceback (most recent call last): 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/contrib/sitemaps/views.py", line 39, in sitemap 
    urls.extend(site().get_urls(page=page, site=current_site)) 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/contrib/sitemaps/__init__.py", line 75, in get_urls 
    for item in self.paginator.page(page).object_list: 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/query.py", line 107, in _result_iter 
    self._fill_cache() 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/query.py", line 772, in _fill_cache 
    self._result_cache.append(self._iter.next()) 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/query.py", line 286, in iterator 
    obj = model(*row[index_start:aggregate_start]) 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/base.py", line 297, in __init__ 
    setattr(self, field.attname, val) 

File "/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/fields/subclassing.py", line 99, in __set__ 
    obj.__dict__[self.field.name] = self.field.to_python(value) 

File "build/bdist.linux-x86_64/egg/timezones/fields.py", line 43, in to_python 
    return coerce_timezone_value(value) 

File "build/bdist.linux-x86_64/egg/timezones/utils.py", line 34, in coerce_timezone_value 
    raise ValidationError("Unknown timezone") 

ValidationError: [u'Unknown timezone'] 
+0

嘗試調試並查看文件「/home/username/virtualenvs/kdmc/lib/python2.7/site-packages/django/db/models/fields/subclassing.py」中第99行的值 obj .__ dict __ [self.field.name] = self.field.to_python(value) – akonsu

+0

akonsu - 我可以幫你解決如何做到這一點的步驟嗎?我需要在生產中改變Django的源代碼嗎? (因爲這隻發生在生產服務器上)。謝謝。 – shacker

+0

這裏是一個鏈接與各種調試方法:http://stackoverflow.com/questions/1118183/how-to-debug-in-django-the-good-way。但我自己只是修改源代碼,是的,並拋出一個異常與我想檢查的變量。 – akonsu

回答

0

見更新:上面的部分 - 這竟然是一系列的從舊安裝庫和在virtualenv中不正確的路徑發生衝突。