TLDR; If you are using the
FileSystemBootstrapper
on thearchtechx/tenancy
package and also the Laravel-Vite package, update your tenancy config (tenancy.filesystem.asset_helper_tenancy
) tofalse
. Otherwise your generated script/style tags after building assets will be returning a tenant-scoped asset URL.
Here is the context of the problem I was facing:
I am building a multi-tenant SaaS application using this tenancy package from Tenacy for Laravel. It has a concept of tenancy bootstrappers that modifies relevant framework defaults to make the application tenant aware. The FileSystem Bootstrapper makes the Laravel asset()
helper method return tenant specific assets through a TenantAssetController
.
I also replaced Laravel Mix with Vite and I'm using this Laravel Vite package to make the integration easier. The package provides @vite
directive to output all the necessary asset tags in your blade file. The underlying methods use the asset()
helper method from the framework. Therefore, any generated asset URL is tenant-scope if I am under a tenant aware route. I am using VueJS for templating so my page ends up not being rendered correctly.
The solution is to update a tenancy config (tenancy.filesystem.asset_tenancy_helper
) to false
. The asset()
helper revert to default. The tenancy package still provides tenant_asset()
helper method for tenant specific assets.
I hope this helps someone out there facing the same issue and save you time.
Top comments (6)
Hello @steekam
Thanks for this article, it helped me a lot.
Now when I use the tenant_asset() function to define a manifest file for each tenant:
I get a URL like this:
Where should I put the manifest.json?
Under storage, I have storage/tenant1/app
Thanks so much.
Hey,
Out of curiosity, why does each tenant have their own
manifest.json
file?I am assuming this is the generated manifest file for vite,
Hello,
Every one of our clients will have the same features but they can customise the UI to look different. From the end users perspective every app will be different and every app can be installed with its own setup like name, icon, etc. For this we need a manifest and icons for each app.
Cheers.
Thanks Kamau, certainly helped me get the fix for this quickly, was scratching my head for a moment there.
I spent hours scratching my head so others won't have to :)
Hello @steekam
Thanks for this article, it helped me a lot.
Now when I use the tenant_asset() function to define a manifest file for each tenant:
I get a URL like this:
subdomain.domain.com:8000/tenancy/...
Where should I put the manifest.json
Under storage, I have storage/tenant1/app
Thanks so much.