我正在Heroku上开发Django应用,因此需要将某些东西暂时存储在我的dyno上。据我了解,这可以通过在dyno的根目录中对/tmp/-folder使用变通办法来实现。但是,我试图引用存储在JS中的JSON,并且一旦静态文件夹之外的内容似乎Django无法加载。如何强制Django也接受其他文件夹?还是我错过了一些非常简单的东西?
这是我从服务器上收到的错误消息:
"GET /tmp/honoradar/mediumsname_temporary.json?v=1539425460111 HTTP/1.1" 404 2731
这是我的jquery代码,其中static作为参考:
var options = {
url: "static/honoradar/mediumsname.json?v=" + versionUpdate,
getValue: function(element) {
return element.name;
},
这是我的tmp参考的jquery代码:
var options = {
url: "tmp/honoradar/mediumsname.json?v=" + versionUpdate,
getValue: function(element) {
return element.name;
},
为了确保文件结构完全相同,我复制了静态文件夹并将其重命名为“ tmp”。
答案 0 :(得分:0)
您在这里所做的事情至少有两件事是错误的。
首先,您正在将文件系统路径与URL混淆。您当然可以在文件系统中存储任何您喜欢的东西,但是与Web应用程序提供的URL没有对应关系。 /static/
起作用的唯一原因是因为您已将其显式映射到文件系统上的路径。在Heroku上,这通常是通过使用whitenoise应用程序完成的。并请注意,/ static / URL不会不是指向实际文件路径/ static /,而是指向应用程序的BASE_DIR内部的目录。
如果考虑到这一点,您会发现您无论如何都不希望它起作用。如果这样的话,任何人都可以通过浏览URL来获取您的代码,包括数据库凭据和服务器上的任何其他秘密信息。
第二,几乎可以肯定,您还是不想将内容存储在Heroku 的文件系统上。如果这样做,它将仅在同一台dyno上可用;这就是短暂的非共享文件系统的重点。如果您通过单独的流程生成文件,则该文件将无法用于网络流程;甚至即使您在多个Dyno上运行您的Web应用程序,也无法保证您的下一个请求将由具有该文件的同一请求服务。
现在,如果考虑到所有这些,您仍然想尝试执行此操作,则解决方案很简单:将文件存储在STATICFILES_DIR内的目录中,并且可以通过STATIC_URL使用。