Skip to content

Manual file replacement.

Update by uploading files via FTP or SFTP. The fallback method for shared hosting and environments without exec().

Jul 21, 2026

Manual file replacement is the universal fallback for updating Reward Loyalty. You download the latest version, upload the files to your server via FTP or SFTP, and run migrations yourself. No exec() function needed.

This is the right method when:

  • Your hosting provider disables the exec() PHP function (common on shared hosting)
  • You don't have SSH or CLI access
  • You prefer full manual control over every file that changes

💡 If your server supports exec(), consider Install from Package instead. It automates backup, extraction, and migration while still letting you control which version to install.

You can run a manual update for any release your license entitles you to download. Your license includes updates for the major version available at the time of purchase, but not an automatic right to a future major version unless we announce otherwise or provide it in writing.

Before you start

Back up everything. Download your entire installation before making changes. These items matter most:

  • Your .env file (environment configuration)
  • Everything in public/files/ (user uploads and media)
  • database/database.sqlite if using SQLite (MySQL/MariaDB users skip this, the database is external)

Update steps

This approach keeps your production site running while you prepare the update. If you don't have a staging environment yet, see Staging Installation for setup guidance.

1. Upload the new version to a temporary subdomain (like staging.yourdomain.com).

2. Copy your data from your current production installation to the staging installation:

Your .env file contains your environment configuration. The public/files/ directory contains all user uploads. If you use SQLite, copy database/database.sqlite as well.

To see hidden files like .env on macOS, press Cmd + Shift + . in Finder.

3. Run database migrations by signing in as admin at /en-us/admin/. If migrations are pending, you'll see a message: "An update is required for your database. Click here to apply the update." If you have terminal access, you can also run php artisan migrate --force instead.

4. Clear caches by deleting the .php files inside bootstrap/cache/. Use the file manager in your hosting panel or your FTP client: open the bootstrap/cache/ folder, delete the .php files in it, and keep the folder itself in place.

If you have terminal access, this one command does the same:

rm -f bootstrap/cache/*.php

With terminal access you can also run php artisan optimize:clear instead.

5. Test everything. Verify login works, member data is intact, and uploaded files display.

6. Switch to production by updating your DNS to point your main domain to the staging installation, or rename directories if both are on the same server.

Option B: In-place update

If you prefer not to use a staging subdomain:

1. Back up everything as described above.

2. Delete or move all files on the server to a backup folder.

3. Upload the new version by opening the extracted package root and uploading every top-level file and directory. Do not upload only the package's internal public directory.

4. Restore your data by copying back your .env file, your public/files/ contents, and database/database.sqlite if using SQLite.

5. Run migrations and clear cache as described above.

The new version includes an empty public/files/ directory. Depending on your upload method, this may overwrite your existing uploads. Always back up first and restore after.

Clearing caches after update

After replacing files, you should clear cached configuration to prevent 500 errors:

  1. Delete bootstrap cache files: Remove all .php files in bootstrap/cache/
  2. Clear framework cache: If you have terminal access, run php artisan optimize:clear
  3. Reload the page: Your admin dashboard should load with the new version

If your site shows a 500 error after updating, clearing bootstrap/cache/ resolves it in most cases.

Protecting custom files

During a manual update, you manage protected paths yourself by backing up and restoring any custom files. To protect these same files during future automated updates, add them to your .env file:

PROTECTED_TRANSLATIONS="de_DE,fr_FR"
PROTECTED_PATHS="custom/branding/"

See What Gets Preserved for the complete list of core protected paths.

Consider automated updates

Manual file replacement works on any hosting, but automated methods are faster and handle backups for you:

  • Dashboard Update: One click, automatic. Requires active support + exec().
  • Install from Package: Place the zip on your server, dashboard handles the rest. Requires exec() but no active support.

If you're on VPS hosting with exec() available, either method is faster and safer.

Cookies on this site.

Google Analytics runs only if you allow it. Cookie policy