如何解决在部署时找不到404服务工作者:React-Django-Heroku
我正在尝试让我的第一位服务人员在Heroku应用程序上注册。前端是使用create-react-app构建的,后端是在同一服务器上使用Django的。我已经制作了一个基本的“ hello world”服务工作者,该工作者可以在开发中工作,但在生产中会出现404错误。我想我可能会误解我在生产中使用的基本文件系统。
我本地目录中的文件系统基本上是这样的:
root
- public
- index.html
- sw.js
static
- manifest.json
- src
- app.js
- serviceWorker.js
...
serviceWorker.js检查浏览器,然后尝试注册服务工作者:
...
navigator.serviceWorker
.register(`${process.env.PUBLIC_URL}/sw.js`)
.then(registration => {
...
//process.env.PUBLIC_URL returns http://localhost:3000/ in development,and https://www.mydomain.app/ in production
sw.js仅包含伪代码:
self.addEventListener('install',function(event) {
console.log("Hello World")
})
将其部署到Heroku后,yarn build
将所有内容打包到一个构建目录中,如下所示:
build
- index.html
- sw.js
- service-worker.js // added automatically by web-pack
- asset-manifest.json // added automatically by web-pack
- precache-manifest.xyz.js // added automatically by web-pack
- static
- css
- js
- manifest.json
在生产中,这在register()
函数期间找不到文件sw.js。自动生成的service-worker.js发生了相同的错误,在开发环境中有效,但在生产环境中无效(404):
"TypeError: Failed to register a ServiceWorker for scope ('https://www.mydomain.app/') with script ('https://www.mydomain.app/sw.js'): A bad HTTP response code (404) was received when fetching the script."
我认为我对PUBLIC_URL的使用是正确的,因为它在开发和生产中都可以在<link rel="manifest" href="%PUBLIC_URL%/static/manifest.json" />
处找到manifest.json。我已经使用heroku run bash
检查了文件系统,似乎一切都在正确的位置,我想念的是什么?
解决方法
找到答案here,也许这会对其他人有所帮助。
我需要将sw.js文件作为带有Django URL的视图提供:
from django.views.generic.base import TemplateView
urlpatterns = [
...
path('sw.js',TemplateView.as_view(template_name="sw.js",content_type='application/javascript'),name='sw.js'),...
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。