Django + Heroku:compilemessages有效但不是我的翻译文件。

时间:2018-04-03 17:33:36

标签: python django heroku

我发现自己陷入了一种非常奇怪的境地:

  1. 我没有将.mo个文件提交到我的回购邮件中。我计划在部署
  2. 后生成它们
  3. 我在https://github.com/piotras/heroku-buildpack-gettext.git
  4. 安装了gettext buildpack

    所以这就是我所做的步骤:

    1. 部署到heroku。
    2. 运行heroku run python manage,py compilemessages
    3. 正在输出:

      在/app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/ru/LC_MESSAGES处理文件django.po

      在/app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/cy/LC_MESSAGES处理文件django.po

      处理/ app / prometheus / locale / zh_hans / LC_MESSAGES中的文件django.po

      在/app/.heroku/python/lib/python3.6/site-packages/django/contrib/gis/locale/sk/LC_MESSAGES

      处理文件django.po
    4. 列出其中一个文件:heroku run ls /app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES结果:django.mo django.po

    5. 列出我们的文件:heroku run ls /app/prometheus/locale/zh_hans/LC_MESSAGES/ 结果:django.po

    6. django.mo缺失。

      我跑了python manage.py shell,看看我是否有一些错误:

      heroku run python manage.py shell
      In [1]: from django from django.conf import settings
      In [3]: print(settings.BASE_DIR)
      /app/prometheus
      In [4]: print(settings.LOCALE_PATHS)
      ('/app/prometheus/locale',)
      

      所以我不知道为什么我的django.mo文件没有被生成。

      任何猜测?

2 个答案:

答案 0 :(得分:0)

TL; DR:先生成Django.mo,然后将其删除。

我处在相同的情况下,并试图用

生成文件
$ heroku run django-admin compilemessages
$ heroku run ls locale/LANG/LC_MESSAGES/
django.po

我不想等待每条命令都使用过并连接到Heroku

$ heroku run "django-admin compilemessages; ls locale/LANG/LC_MESSAGES/"
django.mo django.po
$ heroku run ls locale/LANG/LC_MESSAGES/
django.po

结果是,django.mo已创建,但由于某种原因,它会立即被删除。

在Google上进行搜索将为Heroku提供帮助-页面Why are my file uploads missing/deleted?

  

Heroku文件系统是短暂的-这意味着在dyno运行时,对文件系统的任何更改只会持续到dyno关闭或重新启动为止。每个dyno都会使用最新部署中的文件系统的干净副本进行引导。

会发生什么

heroku run COMMAND

启动一个新的dyno,在其中运行命令,并在命令退出后关闭dyno,因此删除了该命令创建的所有文件。

据我所知,可以选择提交.mo文件进行回购,也可以从存储for example S3中提供它们。

答案 1 :(得分:0)

Since Heroku 20,为默认 Python 构建包自动添加 gettext。这仅在构建期间而不是在运行时。因此该命令应在构建后立即执行。

幸运的是,这可以使用 bin/post_compile 中的后编译文件(没有像 procfile 这样的扩展名)和以下行来完成:

python manage.py compilemessages

您可以选择添加特定语言(例如 python manage.py compilemessages -l nl

由于 Heroku 会自动添加 gettext,因此不再需要像上面提到的 Piotras 那样添加额外的构建包(至少对于 gettext)。

这些文件在构建阶段生成,将成为压缩图像的一部分。因此以后不应删除它们。