【问题标题】:Django+Heroku: compilemessages works but not MY translation file.Django+Heroku:compilemessages 有效,但不是我的翻译文件。
【发布时间】:2018-09-13 03:09:51
【问题描述】:

我发现自己处于一个非常奇怪的境地:

  1. 我没有将我的.mo 文件提交到我的存储库中。我计划在部署后生成它们
  2. 我在https://github.com/piotras/heroku-buildpack-gettext.git 安装了可用的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

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 文件没有生成。

有什么猜测吗?

【问题讨论】:

    标签: python django heroku


    【解决方案1】:

    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 已创建,但由于某种原因它立即被删除。

    谷歌搜索得到 Heroku 帮助 -page Why are my file uploads missing/deleted?:

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

    会发生什么

    heroku run COMMAND
    

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

    据我所知,选项是将 .mo 文件提交到 repo 或从存储中提供它们,for example S3

    【讨论】:

    • 是的,我开始提交.mo 来解决问题。在我看来,这只是小罪。
    • Heroku 的临时文件系统总是让我抓狂并导致几个小时的疯狂。我希望这是我最后一次被它咬了哈哈。谢谢!
    【解决方案2】:

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

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

    python manage.py compilemessages
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多