Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: Missing Directories in public/uploads Cause Errors for Accessory/Consumable/Component Pictures #5630

Closed
2 tasks done
ParadoxGuitarist opened this issue May 30, 2018 · 1 comment
Assignees
Labels
✋ bug Confirmed bug

Comments

@ParadoxGuitarist
Copy link
Contributor

ParadoxGuitarist commented May 30, 2018

Please confirm you have done the following before posting your bug report:

Describe the bug
Users are unable to upload images for accessories and consumables.

To Reproduce
Steps to reproduce the behavior:

  1. Create a consumable or accessory
  2. Select an image to upload/attach to it.
  3. Save changes.
  4. See Whoops error.

Expected behavior
Image Uploads.

Suspected Root Cause

It appears as though not all of the appropriate directories are being created in /var/www/html/public/uploads/. There are 13 subdirectories listed in the git project but only 9 appear in docker after downloading the image. Images uploaded for Accessories and Consumables fail after the system fails to create a directory for them. Here are the logs from pulling snipe-it:latest and listing the directory:

# docker run -d -p 8080:80 --name="snipe-it" --link mysql-snipe:mysql --env-file=my_env_file snipe/snipe-it:latest
Unable to find image 'snipe/snipe-it:latest' locally
Trying to pull repository docker.io/snipe/snipe-it ... 
sha256:594a17920e19860f7be3d154541acc88c17d8044c0f56ce9f960a547bdd49ad4: Pulling from docker.io/snipe/snipe-it
297061f60c36: Pull complete 
e9ccef17b516: Pull complete 
dbc33716854d: Pull complete 
8fe36b178d25: Pull complete 
686596545a94: Pull complete 
290b00c2a488: Pull complete 
84e416f2c3b7: Pull complete 
778dc7691495: Pull complete 
09947fb5c8a0: Pull complete 
3ebc3b0ec0a1: Pull complete 
75a70146fd5a: Pull complete 
f8a493590271: Pull complete 
b179f69f8455: Pull complete 
4f744ceaf13c: Pull complete 
e25265417c53: Pull complete 
a3694c4cd567: Pull complete 
02700703f2c0: Pull complete 
49e5402304cb: Pull complete 
c8f6695c1605: Pull complete 
51a4dc2a4b49: Pull complete 
21ca12222e2e: Pull complete 
9b6bb6986201: Pull complete 
a26c3ea37083: Pull complete 
50652a4429c0: Pull complete 
c55ddf0e7e36: Pull complete 
59e3bebdefff: Pull complete 
a68ce65966e1: Pull complete 
1bdeea372afe: Pull complete 
743d55e71777: Pull complete 
Digest: sha256:594a17920e19860f7be3d154541acc88c17d8044c0f56ce9f960a547bdd49ad4
Status: Downloaded newer image for docker.io/snipe/snipe-it:latest
c3517fa24dad066ba1d58dd16676a64965a0b3294a700a17430460bcec62e27f
[root@snipe]# docker exec -it snipe-it ls -al /var/www/html/public/uploads/
total 0
drwxr-xr-x. 1 docker root 164 May 30 04:42 .
drwxr-xr-x. 1 root   root  44 May 30 04:42 ..
drwxr-xr-x. 1 docker root   0 May 30 04:42 avatars
drwxr-xr-x. 1 docker root   0 May 30 04:42 barcodes
drwxr-xr-x. 1 docker root   0 May 30 04:42 categories
drwxr-xr-x. 1 docker root   0 May 30 04:42 companies
drwxr-xr-x. 1 docker root   0 May 30 04:42 departments
drwxr-xr-x. 1 docker root   0 May 30 04:42 locations
drwxr-xr-x. 1 docker root   0 May 30 04:42 manufacturers
drwxr-xr-x. 1 docker root   0 May 30 04:42 models
drwxr-xr-x. 1 docker root   0 May 30 04:42 suppliers

You can see here that several directories are missing. While uploading an image to an asset, the directory appears, but created with different group permissions:

# docker exec -it snipe-it ls -al /var/www/html/public/uploads/
total 0
drwxr-xr-x. 1 docker root  176 May 30 04:51 .
drwxr-xr-x. 1 root   root   44 May 30 04:42 ..
drwxr-xr-x. 1 docker staff  60 May 30 04:51 assets
drwxr-xr-x. 1 docker root    0 May 30 04:42 avatars
drwxr-xr-x. 1 docker root    0 May 30 04:42 barcodes
drwxr-xr-x. 1 docker root    0 May 30 04:42 categories
drwxr-xr-x. 1 docker root    0 May 30 04:42 companies
drwxr-xr-x. 1 docker root    0 May 30 04:42 departments
drwxr-xr-x. 1 docker root    0 May 30 04:42 locations
drwxr-xr-x. 1 docker root    0 May 30 04:42 manufacturers
drwxr-xr-x. 1 docker root    0 May 30 04:42 models

Error Messages

  • Same issue in the demo on the site.
  • larvel logs:
tail -f storage/logs/laravel.log
[2018-05-29 22:03:37] production.ERROR: Intervention\Image\Exception\NotWritableException: Can't write image data to path (/var/www/html/public/uploads/accessories/accessory-ZRszHKEjQPKD8AvuYO.jpg) in /var/www/html/vendor/intervention/image/src/Intervention/Image/Image.php:143
Stack trace:
#0 /var/www/html/app/Http/Controllers/AccessoriesController.php(100): Intervention\Image\Image->save('/var/www/html/p...')
#1 [internal function]: App\Http\Controllers\AccessoriesController->store(Object(App\Http\Requests\ImageUploadRequest))
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(55): call_user_func_array(Array, Array)
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('store', Array)
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\AccessoriesController), 'store')
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(160): Illuminate\Routing\Route->runController()
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(572): Illuminate\Routing\Route->run()
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /var/www/html/vendor/laravel/passport/src/Http/Middleware/CreateFreshApiToken.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Laravel\Passport\Http\Middleware\CreateFreshApiToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /var/www/html/app/Http/Middleware/CheckForTwoFactor.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\CheckForTwoFactor->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#17 /var/www/html/app/Http/Middleware/CheckLocale.php(42): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\CheckLocale->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(574): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(533): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(511): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#35 /var/www/html/app/Http/Middleware/CheckForDebug.php(25): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#36 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\CheckForDebug->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 /var/www/html/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#39 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /var/www/html/app/Http/Middleware/CheckForSetup.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#42 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\CheckForSetup->handle(Object(Illuminate\Http\Request), Object(Closure))
#43 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#44 /var/www/html/app/Http/Middleware/NosniffGuard.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#45 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\NosniffGuard->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 /var/www/html/app/Http/Middleware/ContentSecurityPolicyHeader.php(18): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#48 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\ContentSecurityPolicyHeader->handle(Object(Illuminate\Http\Request), Object(Closure))
#49 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#50 /var/www/html/app/Http/Middleware/ReferrerPolicyHeader.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#51 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\ReferrerPolicyHeader->handle(Object(Illuminate\Http\Request), Object(Closure))
#52 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#53 /var/www/html/app/Http/Middleware/XssProtectHeader.php(18): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#54 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\XssProtectHeader->handle(Object(Illuminate\Http\Request), Object(Closure))
#55 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#56 /var/www/html/app/Http/Middleware/FrameGuard.php(17): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#57 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\FrameGuard->handle(Object(Illuminate\Http\Request), Object(Closure))
#58 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#59 /var/www/html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#60 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#61 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#62 /var/www/html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#63 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#64 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#65 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#66 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#67 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#68 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#69 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#70 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#71 /var/www/html/public/index.php(58): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#72 {main}

Work Around - Fix - Patch

You can have images upload successfully by creating the directories manually. Granted your container name is snipe-it you could run these four commands to create them for you:

docker exec snipe-it mkdir /var/www/html/public/uploads/accessories
docker exec snipe-it mkdir /var/www/html/public/uploads/consumables
docker exec snipe-it mkdir /var/www/html/public/uploads/components
docker exec snipe-it chown -R docker  /var/www/html/public/uploads/

Additional context

  • Fresh docker image.
  • What Fedora/Centos
  • What method you used to install Snipe-IT DOCKER
  • Include what you've done so far in the installation, and if you got any error messages along the way: Set up a user account.
  • Indicate whether or not you've manually edited any data directly in the database: No
  • Snipe-IT version | v4.4.1 build 3636 (gece916e12)
  • PHP Version | 7.0.30-0ubuntu0.16.04.1
  • Laravel Version | 5.4.35

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

@ParadoxGuitarist ParadoxGuitarist changed the title Bug: Missing Directories in public/uploads Cause Errors for Accessory/Consumable Pictures Bug: Missing Directories in public/uploads Cause Errors for Accessory/Consumable/Component Pictures May 30, 2018
@snipe snipe added the ✋ bug Confirmed bug label May 30, 2018
@snipe
Copy link
Owner

snipe commented Jul 25, 2018

@uberbrady did this get fixed in a recent PR?

uberbrady added a commit that referenced this issue Sep 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✋ bug Confirmed bug
Projects
None yet
Development

No branches or pull requests

3 participants