0

新しいオブジェクトに間違ったタイムスタンプを設定しているアプリが heroku にあります。一生理由が分からない。

何が起こっていますか:

  1. heroku-run Web サイトでフォームを送信しています。

  2. Djangoビューは新しいオブジェクトを作成して保存します

  3. models.py には " ts = models.DateTimeField(default = datetime.now(utc)) " があるため、送信時に utc タイムスタンプを保存する必要がありますが (これはローカルで行われます)、heroku ではサーバー起動時のタイムスタンプを保存します。 .

Models.py:

class NewsArticle(models.Model):
    link = models.URLField(max_length = 2000)
    title = models.CharField(max_length = 300)
    img_path = models.CharField(null = True, max_length = 300)
    ts = models.DateTimeField(default = datetime.now(utc))
    user = models.ForeignKey(User)
    hostname = models.CharField(max_length = 300)
    deleted = models.BooleanField(default = False)

Views.py:

news_article = NewsArticle(...)
news_article.save()

print news_article.ts
print datetime.now(utc)
import sys
sys.stdout.flush()

heroku ログの対応する出力 (22:00:34 UTC に Heroku サーバーを再起動しました):

2013-01-02T22:01:56+00:00 app[web.1]: 2013-01-02 22:00:34.746547+00:00
2013-01-02T22:01:56+00:00 app[web.1]: 2013-01-02 22:01:56.919520+00:00

そして、15分後にもう一度:

2013-01-02T22:15:46+00:00 app[web.1]: 2013-01-02 22:00:34.746547+00:00
2013-01-02T22:15:46+00:00 app[web.1]: 2013-01-02 22:15:46.489815+00:00

models.py で発生している datetime.now(utc) 呼び出しに問題があることは明らかですが、その理由はわかりません。誰にもアイデアはありますか?

4

1 に答える 1

2

問題は、デフォルトの設定方法にある可能性があります。次の 2 つのコード セットは同一です。

now_at_import = datetime.now(utc)
MyModel
  ...
  ts = models.DateTimeField(default = now_at_import)

#is exactly the same as
MyModel
  ...
  ts = models.DateTimeField(default = datetime.now(utc))

代わりに必要なのは次のとおりです。

def get_utc_now():
  return datetime.now(utc)


MyModel
  ...
  ts = models.DateTimeField(default = get_utc_now)
于 2013-01-02T22:41:55.910 に答える