python - Heroku 工作人员无法在同一个 Dyno 上的 Web 文件夹上写入
问题描述
我有一个免费的测功机实例,它运行一个简单的工作程序,它创建一个 RSS 文件并将其上传到 PythonAnywhere(就像使用该静态rss.xml
文件的 Web 服务器一样使用它)。
我正在尝试从 PythonAnywhere 迁移到heroku-buildpack-static
在同一个工作人员测功机上使用网络,但我无法使其工作。看起来工人和网络在不同的文件夹/环境中运行,我找不到它的位置。
worker: python main.py
web: bin/boot
该main.py
脚本将文件写入当前文件夹并成功上传到 PythonAnywhere,但我看不到该文件在 Heroku 上的写入位置。我试图创建一个文件夹/app/web
并修改它main.py
以写入它,但我也看不到创建/更新的文件,我使用 Heroku 控制台检查了这一点。我认为工作人员使用不同的家或实例来运行,但我不确定这个结构位于什么位置。我还.profile
使用以下命令创建了一个但没有成功:
chmod -R 777 /app/web
该应用程序还包含一个static.json
文件,其中包含以下内容以指向正确的文件夹并避免缓存
{
"root": "/app/web/",
"headers": {
"/": {
"Cache-Control": "no-store, no-cache"
}
}
}
解决方案
看起来工人和网络在不同的文件夹/环境中运行
是的,这正是正在发生的事情。
在同一个工人测功机上
事实上,你不在同一个测功机上。您的web
流程和您的worker
流程在隔离的环境中执行。考虑标题“过程类型与测功机”下的文档的这一部分:
流程类型是一个或多个测功机实例化的原型。这类似于在面向对象编程中,类是一个或多个对象实例化的原型。
web
您不能从测功机将文件写入您的测worker
功机。它们是完全隔离的,不共享文件系统。
正如 msche 所指出的,dyno 文件系统是短暂的。即使您确实设法编写了此文件,例如通过运行 Web 服务而不是具有 API 端点来接受文件的静态主机,该文件也会在每次 dyno 重新启动时丢失。这种情况经常发生(至少每天一次)。
即使您在评论中所说的每两分钟编写一次文件,您的网站平均每天也会被破坏一分钟。我建议将此数据存储在其他地方,例如作为 Amazon S3 上的文件或客户端-服务器数据存储。
请注意,您还可以直接从 Amazon S3 托管静态站点,这可能很适合这里。
推荐阅读
- awk - 无法使用 sed 将字符串替换为多行字符串
- ios - How to sign-out Google from Sign-in Auth using alert view
- logging - 如何计算重复的日志条目
- python - SQLAlchemy - 如何在另一个类(表)中使用一个类(表)中的方法
- amazon-web-services - 两个配置文件共享相同的配置
- android - 如何获取没有键名的json数组数据
- python - 枕头相当于 GIMP 的亮度-对比度对话?
- javascript - 将 JSON 对象的值从 HTTP 请求传递到另一个 JSON 对象
- solr - Solr Query using Facet missing the special characters and its showing in split values
- django - Django REST Framework:为什么添加 IsAuthenticated 权限只会引发 500 内部错误而不是 401 / 403 错误?