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运行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
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
)
这些文件在构建阶段生成,并将成为压缩映像的一部分。因此,不应在事后删除它们