Изображения в приложении / общедоступном (laravel) не отображаются в приложении Heroku

У меня есть проект в laravel, один из разделов которого загружает изображения на сервер. Изображения сохраняются в хранилище файлов и в папке / storage / app / public. В локальном работает корректно, изображения выглядят хорошо, но когда я загружаю проект на heroku, изображения не видны. Даже в героку запустите команду "php artisan storage: link"

Почему я не вижу изображения? Я бы не хотел использовать для этого AWS S3. Что я мог пропустить?

Спасибо..


person SundayGirl    schedule 07.08.2017    source источник
comment
На что ссылаются неработающие изображения и на что они должны ссылаться?   -  person Samsquanch    schedule 07.08.2017
comment
Изображения отображаются с Storage :: url ('file1.jpg'); (site.dev/file1.jpg) Поскольку изображения хранятся в / storage / app / public, таким образом контент не виден пользователям, только когда он нужен. Но почему-то в героку этого не происходит, а в локальном все работает корректно.   -  person SundayGirl    schedule 07.08.2017
comment
Какое разрешение у хранилища. Это могло быть проблемой.   -  person anwerj    schedule 07.08.2017
comment
Я бы не хотел использовать для этого AWS S3. Что ж, возможно, тебе придется. Если не S3, то какой-нибудь другой сервис хранения файлов. Файловая система Heroku недолговечна; любые файлы, которые вы храните там, будут потеряны при следующем перезапуске Dyno. Это случается довольно часто (не реже одного раза в день).   -  person Chris    schedule 07.08.2017
comment
Даже в heroku запустите команду php artisan storage: link. Это не работает, потому что, когда вы используете heroku run, вы подключаетесь к новому, отдельному экземпляру от того, что работает в сети. .   -  person ceejayoz    schedule 15.08.2018


Ответы (4)


У Heroku нет хранилища файлов. Поэтому, если вы собираетесь использовать его для своих серверов, вам нужно придумать другой способ хранения файлов.

person Rodrigo    schedule 19.04.2018
comment
Да, это единственный ответ, когда дело касается Heroku. Вы просто не можете хранить файлы локально на Heroku - динамометрические станции перезапускаются хотя бы раз в день, и каждый раз вы теряете каждый загруженный в них файл. Что-то вроде S3 или хранение файлов в базе данных требуется для любых файлов, не находящихся в системе контроля версий. - person ceejayoz; 15.08.2018

В вашем composer.json добавьте:

"post-install-cmd": ["ln -sr storage / app / public public / storage"],

person Fernando Mandon    schedule 21.10.2017
comment
Это работает!!! Не могли бы вы объяснить, что он на самом деле делает? - person jovialcore; 13.05.2021

Также вы можете загружать изображения в общую папку, а не в папку для хранения (таким образом у вас не возникнет проблем, как указано выше). для этого Вам нужно изменить конфиг в app/filesystem.php

изменение

'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

к этому:

'public' => [
            'driver' => 'local',
            'root' => public_path(),
            'url' => env('APP_URL').'/public',
            'visibility' => 'public',
        ],

и вы можете хранить файлы так:

$pathToFile = Storage::disk('public')->put('uploads/', $file);

теперь вы можете вставить переменную $pathToFile в БД!

person Akbar Mirsiddikov    schedule 15.08.2018

То, что я сделал, сработало для меня:

В вашем composer.json добавьте:

"post-install-cmd": [ "ln -sr storage/app/public public/storage" ], (не забудьте запятую ,, если у вас есть другая строка после приведенной выше команды) Но вы должны добавить строку выше в раздел скриптов.  введите описание изображения здесь

person jovialcore    schedule 13.05.2021