Closed johansmitsnl closed 1 year ago
Hi Johan,
Are you able to share a reproducible project that can lead to this error? The error is pretty clear, it says it can't find a schemas
folder in your project but I cannot see the reason why at the moment.
Thank you.
Know you mention this. This is a release build of the app that it is shipped to a other location to run. In that location there are no folders of the migration present since the app is in /usr/bin
. This explains the error.
Can't you embed the folders that are needed?
Yes, you can perfectly run your app in an embedded context. There is a function called load_files
which will use embedded folder instead of the running filesystem folder.
Check the docs here: https://docs.rs/surrealdb-migrations/latest/surrealdb_migrations/struct.MigrationRunner.html#method.load_files
If you want a more concrete example, there is a sample app in this project. It is designed to run in a WASM embedded context but it will be similar to any other kind of embedded context. The sample can be found on this repository here: https://github.com/Odonno/surrealdb-migrations/blob/main/samples/wasm/rsw-hello/src/lib.rs
@Odonno thanks for the tip and yes this worked. I used the WASM example but I have a few improvements:
When you run the scaffold example on the readme it created directories in the root dir. Because of this it is immediately incompatible for binary/wasm shipment. In the configuration section it mentions the path dir.
To my opinion the WASM/Embed use case could have more explanation on how to achieve this and maybe make the default dir compatible like your wasm example and put it into /db
.
You may close this if you like.
Yes, I put my migration files inside db
folder in my sample app and I target it this way https://github.com/Odonno/surrealdb-migrations/blob/0ff56498de3331c384c512a1c99b90b2a9160934/samples/wasm/rsw-hello/src/lib.rs#L23
This is because when embedding a folder, it will embed EVERYTHING in this folder. So you have to create a specific folder with only your migration files. That is if you want to optimize your app and not put your entire project inside the embedded folder. I may have not explained this part, indeed. WIll add a note somewhere to explain why it is done this way and why it is a best practice to do this.
About the scaffolding, it is in general done when your project is empty. I can totally see a use case where you want to scaffold a project based on dir property that you set in the configuraton file. Noted!
Describe the bug
Error listing schemas directory
To Reproduce
Expected behavior Migrate
Information Please complete the following information and remove the unnecessary ones.