Python Django+;编译信息有效,但不是我的翻译文件。

Python Django+;编译信息有效,但不是我的翻译文件。,python,django,heroku,Python,Django,Heroku,我发现自己处于一个非常奇怪的境地: 我没有将我的.mo文件提交到我的repo中。我计划在部署后生成它们 我在https://github.com/piotras/heroku-buildpack-gettext.git 以下是我所做的步骤: 部署到heroku 运行heroku运行python管理,py编译消息 这将被输出: 正在处理/app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/ru

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

  • 我没有将我的
    .mo
    文件提交到我的repo中。我计划在部署后生成它们
  • 我在
    https://github.com/piotras/heroku-buildpack-gettext.git
  • 以下是我所做的步骤:

  • 部署到heroku
  • 运行heroku运行python管理,py编译消息
  • 这将被输出:

    正在处理/app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/ru/LC_消息中的文件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_消息中的文件django.po

    处理/app/.heroku/python/lib/python3.6/site-packages/django/contrib/gis/locale/sk/LC_消息中的文件django.po

  • 列出以下文件之一:
    heroku运行ls/app/.heroku/python/lib/python3.6/site packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES
    RESULTS:
    django.mo django.po

  • 列出我们的文件:
    heroku运行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文件


    猜猜看

    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的帮助页面:

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

    发生的是

    heroku run COMMAND
    
    启动新的dyno,在其中运行命令,并在命令退出后关闭dyno,以便删除该命令创建的所有文件

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

    ,gettext会自动添加到默认的Python构建包中。这仅在生成期间,而不是在运行时。因此,该命令应在生成之后立即执行

    幸运的是,可以使用
    bin/post_compile
    中的post compile文件(没有类似procfile的扩展名)和以下行完成此操作:

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

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

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