Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Heroku worker无法在同一个Dyno上的web文件夹上写入_Python_Heroku - Fatal编程技术网

Python Heroku worker无法在同一个Dyno上的web文件夹上写入

Python Heroku worker无法在同一个Dyno上的web文件夹上写入,python,heroku,Python,Heroku,我有一个免费的dyno实例,运行一个简单的worker,创建一个RSS文件并将其上传到PythonAnywhere(使用它就像使用这个静态RSS.xml文件的web服务器一样) 我正试图从Pythonywhere开始,在同一个worker dyno上使用webheroku buildpack static,但我无法让它工作。看起来worker和web在不同的文件夹/环境中运行,我找不到它的位置 worker: python main.py web: bin/boot main.py脚本将文件写

我有一个免费的dyno实例,运行一个简单的worker,创建一个RSS文件并将其上传到PythonAnywhere(使用它就像使用这个静态
RSS.xml
文件的web服务器一样)

我正试图从Pythonywhere开始,在同一个worker dyno上使用web
heroku buildpack static
,但我无法让它工作。看起来worker和web在不同的文件夹/环境中运行,我找不到它的位置

worker: python main.py
web: bin/boot
main.py
脚本将文件写入当前文件夹,并成功地将其上载到Pythonywhere,但我看不到该文件在Heroku上写入的位置。我试图创建一个文件夹
/app/web
,并在
main.py
上对其进行修改以写入,但我也看不到创建/更新的文件,我使用Heroku控制台检查了这一点。我认为工作人员使用不同的主页或实例来运行,但我不确定该结构位于何处。我还使用以下命令创建了一个
.profile
,但没有成功:

chmod -R 777 /app/web

该应用程序还包含一个
static.json
文件,其中包含以下内容以指向正确的文件夹并避免缓存

{
  "root": "/app/web/",
  "headers": {
    "/": {
      "Cache-Control": "no-store, no-cache"
    }
  }
}

Heroku使用一个临时文件系统,请参见此。heroku文档建议使用第三方存储,如AWS S3

看起来worker和web在不同的文件夹/环境中运行

是的,这正是正在发生的事情

在同一个工人身上

事实上,你不是在同一个dyno上。您的
web
流程和
worker
流程在隔离的环境中执行。考虑:

过程类型是一个原型,一个或多个动态对象从中实例化。这与是原型的方式类似,在面向对象编程中,一个或多个对象是从该原型实例化的

您不能从您的
工作人员
dyno将文件写入您的
web
dyno。它们是完全隔离的,不共享文件系统

正如msche所指出的,dyno文件系统是短暂的。即使您确实成功地编写了此文件,例如,通过运行web服务而不是具有接受该文件的API端点的静态主机,每次dyno重新启动时,该文件都将丢失。这(每天至少一次)

即使你像你在评论中说的那样每两分钟写一次文件,你的网站平均每天也会被破坏一分钟。我建议将此数据存储在其他位置,例如,或存储在存储库中


请注意,您也可以,这可能非常适合这里。

我知道这一点,对我来说没有问题,因为rss.xml文件每2分钟完全生成一次,我的问题是如何从heroku向web提供它?如果我不能与web实例共享它,我不知道该怎么做。如果最终的解决方案是在一个不同的地方主机,我将继续使用Pythonywhere hostPerfect,这正是我所想的,谢谢你的帮助。最后一个问题是,有没有一种简单的方法可以将Heroku内部的工作人员生成的静态文件(rss.xml)发布/服务到web?我不想使用像S3这样的外部工具,因为我已经在使用Pythonywhere,这是一个仅用于个人目的的简单项目。我的答案中的最后一个链接指向Heroku支持的数据存储插件。也许您可以将提要保存到worker中的Redis,然后从那里加载到web服务中?但这样,您的web服务就不会是静态的。或者使用S3和,完全避免Heroku上的
web
进程?或者将您的两个服务合并为一个,构建您的RSS提要并从一个dyno提供服务?是的,我将只在一个web dyno中组合这两个服务,事实上,这会更好,我将在get from my feed reader工具上动态生成RSS文件,每10分钟左右一次,非常感谢。