RetroAchievements / RAWeb

The RetroAchievements.org platform. Includes core functionality for managing achievements, game data, and community features.
https://retroachievements.org
GNU General Public License v3.0
246 stars 86 forks source link

Issue building local environment, missing image assets #2407

Closed sethxd closed 3 months ago

sethxd commented 4 months ago

Describe the bug On my local machine, I'm able to get a build of the site up and running, but this one command is failing. The site is functional but links to all image assets are broken. Feels like something is off, the filepaths it's saying are being connected don't look quite right, and I tried to make some tweaks to filesystems.php but don't have enough Laravel knowledge.

To Reproduce Steps to reproduce the behavior:

  1. Follow up the steps in the readme for a XAMPP install.
  2. Run php artisan ra:storage:link --relative
  3. See an error message similar to the screenshot below.

Expected behavior Symbolic links to be created correctly, images to display in the local environment.

Screenshots

image image image image

Desktop (please complete the following information):

Additional context Adding the contents of my current .env file below:

# Development Systems
# using ports 640xx for docker containers
APP_PORT=64000
PHP_PORT=64007
OCTANE_PORT=64008
VITE_PORT=64009
FORWARD_DB_PORT=64010
FORWARD_REDIS_PORT=64030
FORWARD_MINIO_PORT=64040
FORWARD_MINIO_CONSOLE_PORT=64041
FORWARD_MAILPIT_DASHBOARD_PORT=64050
FORWARD_MAILPIT_PORT=64051
FORWARD_MEILISEARCH_PORT=64060
FORWARD_PHPMYADMIN_PORT=64080

# Feature Flags

#FEATURE_EXAMPLE=true

# Application

APP_NAME=RetroAchievements
APP_ENV=local
APP_KEY=base64:2Vx8eAtZ3y70HXhfMf7W+xNj6IbUOYpEaPYdBLQgGEo=
APP_DEBUG=true
APP_TIMEZONE=UTC
#APP_VERSION=DEV
#APP_BRANCH=master

APP_URL=http://raweb.test
#APP_URL=http://localhost:${APP_PORT}
ASSET_URL=http://raweb.test
#MEDIA_URL=http://raweb.test/media
#MEDIA_URL=http://localhost:${FORWARD_MINIO_PORT}/local
#API_URL=http://localhost:${APP_PORT}/api
#CONNECT_URL=http://localhost:${APP_PORT}/api/connect

#INTERCEPTOR_WEB=
#INTERCEPTOR_CONNECT=

#DEBUGBAR_ENABLED=false

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

OCTANE_SERVER=swoole
OCTANE_HTTPS=false

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
#DB_PORT=${FORWARD_DB_PORT}
DB_PORT=3306
DB_DATABASE=retroachievements
DB_USERNAME=retroachievements
#DB_PASSWORD="${DB_USERNAME}"
# for MySQL - MariaDB uses uca1400_ai_ci
DB_COLLATION=utf8mb4_unicode_ci

#LEGACY_MEDIA_PATH=

BROADCAST_DRIVER=pusher
#CACHE_DRIVER=redis
FILESYSTEM_DISK=local
HASH_DRIVER=bcrypt
#QUEUE_CONNECTION=database
#QUEUE_CONNECTION=redis
SESSION_DRIVER=database
SESSION_LIFETIME=10080
SESSION_SECURE_COOKIE=false

PASSPORT_PERSONAL_ACCESS_CLIENT_ID=
PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=
PASSPORT_PRIVATE_KEY=
PASSPORT_PUBLIC_KEY=

REDIS_HOST=127.0.0.1
#REDIS_PORT=${FORWARD_REDIS_PORT}
REDIS_PORT=6379
REDIS_CLIENT=predis
#REDIS_DB=0
#REDIS_CACHE_DB=1
#REDIS_QUEUE_DB=2

#MAIL_MAILER=smtp
MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=${FORWARD_MAILPIT_PORT}
MAIL_USERNAME="${DB_USERNAME}"
MAIL_PASSWORD="${DB_USERNAME}"
MAIL_FROM_ADDRESS=noreply@retroachievements.org
MAIL_FROM_NAME="${APP_NAME}"

# Providers

CLAMAV_SKIP_VALIDATION=true
CLAMAV_UNIX_SOCKET=

CSP_ENABLED=false
#IGNITION_THEME=dark

#FFMPEG_PATH=/usr/bin/ffmpeg
#FFPROBE_PATH=/usr/bin/ffprobe

LARAVEL_WEBSOCKETS_ENABLED=false
LARAVEL_WEBSOCKETS_PORT=64070
LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT=
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK=
LARAVEL_WEBSOCKETS_SSL_PASSPHRASE=
LARAVEL_WEBSOCKETS_SSL_VERIFY_PEER=false

PUSHER_APP_PATH=
PUSHER_APP_ID="${DB_USERNAME}"
PUSHER_APP_KEY="${DB_USERNAME}"
PUSHER_APP_SECRET=yifBodbeygVofubgodAcwuenaryuvWea
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1

VITE_BUILD_PATH=assets/build
VITE_LIVEWIRE_OPT_IN=true
VITE_APP_NAME="${APP_NAME}"
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

#IMAGE_DRIVER=imagick

OPTIMUS_PRIME=1580030173
OPTIMUS_INVERSE=59260789
OPTIMUS_RANDOM=246216635
# OPTIMUS_BIT_LENGTH=4-62
OPTIMUS_BIT_LENGTH=31

SCOUT_DRIVER=database
SCOUT_PREFIX=
SCOUT_QUEUE=true

# Services

AWS_ACCESS_KEY_ID="${DB_USERNAME}"
AWS_SECRET_ACCESS_KEY="${DB_USERNAME}"
AWS_BUCKET=local
AWS_DEFAULT_REGION=eu-west-1
AWS_USE_PATH_STYLE_ENDPOINT=false
#AWS_MINIO=true

DISCORD_KEY=
DISCORD_SECRET=
DISCORD_INVITE_ID=
# public feeds
DISCORD_WEBHOOK_ACHIEVEMENTS=
DISCORD_WEBHOOK_NEWS=
DISCORD_WEBHOOK_USERS=
# moderation feeds
DISCORD_WEBHOOK_MOD_FORUMS=
DISCORD_WEBHOOK_MOD_SENTRY=
# inboxes
DISCORD_WEBHOOK_DEVCOMPLIANCE=
DISCORD_WEBHOOK_DEVQUEST=
DISCORD_WEBHOOK_MOD=
DISCORD_WEBHOOK_MOD_MANUAL_UNLOCK=
DISCORD_WEBHOOK_MOD_VERIFY=
DISCORD_WEBHOOK_QATEAM=
DISCORD_WEBHOOK_QUALITYQUEST=
DISCORD_WEBHOOK_RACHEATS=
DISCORD_WEBHOOK_RAEVENTS=
DISCORD_WEBHOOK_RANEWS=
# roles
DISCORD_ROLE_ADMIN=
DISCORD_ROLE_DEVCOMPLIANCE=
DISCORD_ROLE_EVENTS=
DISCORD_ROLE_INVESTIGATOR=
DISCORD_ROLE_MODERATOR=
DISCORD_ROLE_QATEAM=

FACEBOOK_CLIENT_ID=
FACEBOOK_CLIENT_SECRET=
FACEBOOK_CLIENT_TOKEN=
FACEBOOK_CHANNEL=RetroAchievementsPC

GITHUB_ORG=RetroAchievements

GOOGLE_KEY=
GOOGLE_REDIRECT_URI=
GOOGLE_SECRET=

GOOGLE_RECAPTCHA_KEY=
GOOGLE_RECAPTCHA_SECRET=

PATREON_KEY=
PATREON_SECRET=
PATREON_REDIRECT_URI=
PATREON_USER_ID=5403777

REDDIT_CHANNEL=RetroAchievements

THREADS_CHANNEL=retroachievements

TWITCH_KEY=
TWITCH_REDIRECT_URI=
TWITCH_SECRET=
TWITCH_CHANNEL=retroachievementsorg
TWITCH_STREAMER_KEY=

TWITTER_CHANNEL=retrocheevos
TWITTER_WIDGET_ID=
TwosomesUP commented 3 months ago

@sethxd I was running into the same issue trying to run the website in XAMPP on Windows 11. Windows doesn't seem to like php artisan ra:storage:link --relative so I ended up having to create the symlinks myself. You can run these commands from the console (not powershell) within the RAWeb directory:

mklink /D public\storage ..\storage\app\public 
mklink /D storage\app\static\assets ..\public\assets 
mklink /D storage\app\static\vendor ..\public\vendor 
mklink /D docs\dist ..\storage\app\static\docs
mklink /D public\Badge ..\storage\app\media\Badge
mklink /D public\Images ..\storage\app\media\Images
mklink /D public\bin ..\storage\app\media\bin
mklink /D public\UserPic ..\storage\app\media\UserPic
mklink public\latestintegration.html ..\storage\app\latestintegration.html
mklink storage\app\media\UserPic\_user.png ..\..\..\..\public\assets\images\user\avatar-safe.png
mklink storage\app\media\UserPic\root.png ..\..\..\..\public\assets\images\user\avatar-safe.png
mklink storage\app\media\Images\000001.png ..\..\..\..\public\assets\images\game\icon-safe.png 
mklink storage\app\media\Badge\00001.png ..\..\..\..\public\assets\images\achievement\badge.png
mklink /D public\media ..\storage\app\media
mklink /D public\docs ..\storage\app\static\docs

It may need further testing, but the default game icon, user pic, root (dev) pic, and default achievement icons all seem to load properly now.

image

wescopeland commented 3 months ago

Thanks for helping @TwosomesUP!

I'll go ahead and close this issue as resolved - happy to reopen if further investigation is warranted.

sethxd commented 3 months ago

@TwosomesUP Thanks so much for your help! Life got crazy and I haven't had a chance to try it yet but looks like it'll solve my problem.