我在Heroku部署了我的Laravel应用程序,很高兴它运行得很好,但该应用程序无法访问/storage/app/public/uploads/
中的图像。我还运行了php artisan storage:link
,这是/storage/
文件夹到/public/
目录的符号链接,导致创建/public/storage/uploads/
。
- Heroku中有图像文件(使用
heroku run bash
和ls -la storage/app/public/uploads
查看
Heroku日志
这是heroku中的日志部分。
2-11-06T01:47:03.064600+00:00 app[web.1]: 10.101.243.98 - - [06/Nov/2018:01:47:03 +0000] "GET /storage/uploads/mobile-cabinet.jpg HTTP/1.1" 403 243 "http://somename.herokuapp.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36
2018-11-06T01:47:03.225408+00:00 app[web.1]: [Tue Nov 06 01:47:03.224875 2018] [core:error] [pid 97:tid 139829891245824] [client 10.65.51.99:29323] AH00037: Symbolic link not allowed or link target not accessible: /app/public/storage, referer: http://somename.herokuapp.com/
问题
- Laravel应用程序如何访问它以显示到web应用程序
Heroku dyno上的文件系统是短暂的。因此,如果您手动创建一个符号链接,它将在dyno重新启动或下次部署时被销毁。此外,如果您正在运行类似heroku php artisan storage:link
的命令,则该命令将在与web dyno不同的上下文中执行。一旦该命令完成运行,该符号链接就会被销毁。
例如,heroku run "php artisan storage:link; ls -la public"
实现了您所期望的:
heroku run "php artisan storage:link; ls -la public"
Running php artisan storage:link; ls -la public on ⬢ glacial-ocean-62163... up, run.9596 (Free)
The [public/storage] directory has been linked.
total 28
drwx------ 4 u28609 dyno 4096 Feb 27 19:39 .
drwx------ 14 u28609 dyno 4096 Feb 27 19:39 ..
-rw------- 1 u28609 dyno 593 Feb 27 19:32 .htaccess
drwx------ 2 u28609 dyno 4096 Feb 27 19:32 css
-rw------- 1 u28609 dyno 0 Feb 27 19:32 favicon.ico
-rw------- 1 u28609 dyno 1823 Feb 27 19:32 index.php
drwx------ 2 u28609 dyno 4096 Feb 27 19:32 js
-rw------- 1 u28609 dyno 24 Feb 27 19:32 robots.txt
lrwxrwxrwx 1 u28609 dyno 23 Feb 27 19:39 storage -> /app/storage/app/public
但是,如果您再次运行heroku run ls -la public
,则符号链接将消失:
Running ls -la public on ⬢ glacial-ocean-62163... up, run.7351 (Free)
total 28
drwx------ 4 u54238 dyno 4096 Feb 27 19:32 .
drwx------ 14 u54238 dyno 4096 Feb 27 19:40 ..
-rw------- 1 u54238 dyno 593 Feb 27 19:32 .htaccess
drwx------ 2 u54238 dyno 4096 Feb 27 19:32 css
-rw------- 1 u54238 dyno 0 Feb 27 19:32 favicon.ico
-rw------- 1 u54238 dyno 1823 Feb 27 19:32 index.php
drwx------ 2 u54238 dyno 4096 Feb 27 19:32 js
-rw------- 1 u54238 dyno 24 Feb 27 19:32 robots.txt
事实上,它从未存在于你的网络dyno上。
了解文件系统是短暂的,也应该促使您重新考虑使用存储文件夹进行用户上传。当你的dyno重新启动时,这些上传也会丢失。相反,将用户上传的内容存储在AmazonS3或其他形式的非现场存储中。这将允许您在不冒用户数据风险的情况下随意扩展或销毁dynos。有关这方面的更多信息,请参阅Heroku文档。