我发现自己陷入了一种非常奇怪的境地:
.mo
个文件提交到我的回购邮件中。我计划在部署https://github.com/piotras/heroku-buildpack-gettext.git
所以这就是我所做的步骤:
heroku run python manage,py compilemessages
正在输出:
在/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列出其中一个文件:heroku run ls /app/.heroku/python/lib/python3.6/site-packages/django/contrib/redirects/locale/zh_Hans/LC_MESSAGES
结果:django.mo django.po
列出我们的文件:heroku run 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文件没有被生成。
任何猜测?
答案 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
)。
这些文件在构建阶段生成,将成为压缩图像的一部分。因此以后不应删除它们。