recently wrote a CRUD app with the same stack except using diesel instead of sqlx. But after a while diesel was slowing me down and made things overly complicated, so I started using sqlx for new functions (am planning to replace everything with sqlx at some point).
Personally I find RUST web frameworks lacking in basic functionality for any non-trivial apps. We had to write a lot of code to make the developmen more efficient. I'd say that the current status of Rust in production requires writing a lot of helper code to solve problems that were solved by other frameworks. So if time to market is what interests you, I'd use another language and framework.
Same as GO. "Just use standard library" bros are always there to tell you that you don't need anything, write your own. As if time is not important in business. As If I can tell my PMs that I need 3 times more time to develop something that it can be done in a week in Laravel, Django or NextJS. But hey, at least our final product that is late to the market will be faster. Nobody will use it but hey, look at how performant it is.
There is some truth to this, but the real reason you write a lot of "helper code" is because rust does not allow you to get away with not handling errors. Especially in Axum where you have to return a response and not a anyhow::Error. In the long term you will have to do this in other languages and rust will shine in due time.
Thank you very much for this video. It's really REALLY cool. In the next videos, could you show us: - how to use a logging facade + implementation - how to write tests for this CRUD app using something like @Testcontainers (in Java world) - how to return the id from the insert statement if the id is from a db sequence. For example, my insert statement is like this: insert into my_table ( id, column_name) values (nextval('my_sequence'), 'some name') - how to call another web service, how to generate traceId, spanId and have them written in logging messages - how to use micrometer in Rust - how to use OpenId, OAuth2 in Rust FL0 looks really nice. However, the free tier gives us only 256 MB of memory (it might be ok for a Rust app. I'm coming from the Java world, so 256 MB is very little for me). An alternative solution is Oracle Cloud. Its free tier gives you 4 ARM cpu cores, 24 GB of memory, 200 GB hard disk, a free Oracle db which doesn't use those cpu, memory and hard disk (not sure if Rust can work with Oracle db). I can run docker containers there for a Postgres db, a Jenkins server, a Elasticsearch + Fluentd + Kibana for viewing logs.
These are some awesome suggestions! Thank you! Testcontainers are amazing, I use them for rust projects as well 😁. That's a great idea for a video. Oracle cloud sounds interesting as well, I'll check it out for another video! Thank you again
Thanks I'm curious how many hours did this video take to create? Your production quality is superb. Would like to see a mirror of this in Go - Perhaps a production-tier course?
Thank you so much! I really appreciate that. It probably took around 30 hours total. My script initially wasn't that great so I had to re-record a bunch of audio! That's a great idea! I'll add it to my backlog.
@@dreamsofcodethe idea that you are able to acheive this level of quality in only 30 hours is incredible. Quite in awe of your channel in general, well done! 🚀
I feel like CRUD should conceptually be replaced by "SSR", or Save, Search, Remove, because there’s no point in having separate create and update endpoints anymore over a single Save method that recognizes by whether an id exists in the body whether the operation is create or update, while get by id and get all are rarely sufficient, and a get with query parameters is generally necessary, and finally remove includes soft deletes (which I hate, btw, so I’d rather not). But hey, SSR is already taken by Server-Side Rendering so nvm who cares…
Excellent video. One important bit missed that's also missing in your repo, the `cargo chef cook` also requires a `--release` flag for the Docker caching to work. Without that, it'll still do a full release build every time on the `cargo build`.
Another excellent video of yours! Thank you very much for all the effort you put on your videos. Answering one question you made at the beginning of your video, I'd love to see how you deploy your applications to a custom home lab machine
Thank you! I appreciate the kind words. I'm planning on starting another channel very soon which will be more focused on Homelab. I'll make sure to do an announcement when my first video goes live 😁
Same poor experience here. I asked a question about Neovim and I got several helpful replies. A day later a mod tells me wrong channel (General instead of Neovim help). I politely apologized and thanked him for pointing me to the right channel. Mod continues the conversation by telling me not to do it again. (I didn't) but I apologized again anyway, saying I won't do it again and I know where to post now. Then he keeps pushing for the conversation to go on, and how I should have known better. Not really sure on why he kept pushing for it since I haven't written a single word other than apologizing. So I apologize again and ended the sentence with a smiley face. I was nothing but polite. One minute later he bans me for 24 hours saying that a "smiley face" is considered extremely passive aggressive and he doesn't need such an attitude. I PM him and then he goes on and on how a smiley face is passive-aggressive. He eventually unbanned me. But I gotta say, a person that is so hypersensitive who gets triggered by a genuine smiley face and reads into things that aren't there, and is passive-aggressive himself while accusing others of exactly that, should not moderate your server.
@@nopenope6486 sighs, I have had the same experience in other discord servers, sending a smiley face is somehow "toxic", you should prob send :^), as it is kinda playful and leaves no room for misunderstandings (I hope)
Excellent video, well structured, and the audio is perfect👌 I would like to say though, having entire lines of code flash in make it VERY hard to follow along. Having your cursor spit out the characters, even when sped up, which you do at times, is much more readable. Also, Phoenix+Liveview when? 🤩
Thanks for the feedback! It's a real balancing act trying to keep a good pace for entertainment, whilst also allowing people to follow along. I'll try and do better in the future! I've added to the backlog ;)
Important missing feature/thing to do: make it so that it does a database migration before deployment. And why is it not using the database to generate the timestamps ?
Great video!! BTW I'm thinking about switching to a Linux distro, particularly the one you have, but I really wanna have it look like your UI which is sick.. A tutorial on this would be great!! Great videos as always.
I use Golang and Elixir....enjoy it all. Idk about rust tbh. The complexity of the language doesn't help with fast modifications to existing code bases.
3:25 Why `.unwrap()`...? The return type is already a result. Seems like the question mark operator is more correct. (This is a genuine question... I'm learning too!)
I like your channel. I think you're really good at explaining things. And this one was a good video. The thing is that I watch your channel to try and be a better developer. A LOT of your latest videos has focused heavily on the sponsor, and sometimes the sponsor is not mainstream at all. I'm left with the feeling that I just learned something useless. Again, this doesn't fully apply to this video. Only to a minor extent. I understand the need to monetize the content, and I hope you keep approaching that balance, but please take this into consideration.
Hey! Thanks for the feedback. I hear you. Sponsorships are a hard one to balance. I try to match sponsors to content that I already have planned and am trying to get better at making them complimentary to the video itself (rather than being the sole focus). In this video, the product complimented well for getting the app deployed, otherwise I probably would have just ran it locally or on my homelab. The video content itself other than that was pretty much untouched. As I start producing more content, the ratio of sponsored content should decline, but that's not for a few more months. Thank you for sticking with me as I try to get better with everything! I'm still pretty new to making content!
I like Rust, but I'm afraid of starting a real production project using it, because I don't want to shoot myself in the foot. I've heard async Rust have a lot of complicated stuff which makes it extremely easy to shoot yourself in the foot instead of getting BLAZING FAST™ performance. A ssuming I need something a bit more complicated than just a CRUD API (or some easy CRUD project at first will grow into something complex).
Why the heck does that Dockerfile consist of FOUR stages that almost do nothing? I mean, one build stage is for providing a base for two other build stages, which look like they could do their stuff in one build stage. Is this necessary in rust or why is the "cargo chef prepare" in a different build stage than the "cargo chef cook" and "cargo build"? Seems overcomplicated to create a new build stage for every command but copying everything over from the previous stage. The only thing I could think of is optimizing container build time by making better use of layer caching, although this doesn't seem that significant here.
Agreed. It's not how I would normally write a dockerfile. I also don't believe you need to use their reference one either (I tried it out on another project and it worked fine). You should be good with a more concise dockerfile.
I really like the video and trying to follow along. Just stuck with an error compiling after adding the create_quote handler. Is the code available on github?
Yeah, there's no need to do so. I was just copying the example on the fl0 website. I probably wouldn't use the chef base image either in a personal project but wanted to make it as easy to follow as possible.
Man I would love to see you build on Elixir... There is already lots of Rust content. Even though I love Rust, It would be nice to see Elixir + Phoenix on your channel.
I personally hate docker with a passion. As soon as a I see shit that doesn't touch the file system and is compiled with it's deps using docker, I blow a fuse.
Woud love to see pagination and filtering
This please!
Yes please!
+1
yes and also how you would handle authorization you probably don't just want anybody update/deleting entries in the database
Absolutely!
i would love to see the production ready version of this and a detailed video of all the steps implemented in here
Would love to see a full course on this
recently wrote a CRUD app with the same stack except using diesel instead of sqlx. But after a while diesel was slowing me down and made things overly complicated, so I started using sqlx for new functions (am planning to replace everything with sqlx at some point).
If you use mongodb you can write straight up queries in rust. Rust is the best language for mongodb and vice versa.
Personally I find RUST web frameworks lacking in basic functionality for any non-trivial apps. We had to write a lot of code to make the developmen more efficient.
I'd say that the current status of Rust in production requires writing a lot of helper code to solve problems that were solved by other frameworks. So if time to market is what interests you, I'd use another language and framework.
Same as GO. "Just use standard library" bros are always there to tell you that you don't need anything, write your own. As if time is not important in business. As If I can tell my PMs that I need 3 times more time to develop something that it can be done in a week in Laravel, Django or NextJS. But hey, at least our final product that is late to the market will be faster. Nobody will use it but hey, look at how performant it is.
There is some truth to this, but the real reason you write a lot of "helper code" is because rust does not allow you to get away with not handling errors. Especially in Axum where you have to return a response and not a anyhow::Error. In the long term you will have to do this in other languages and rust will shine in due time.
Examples?
I like the tech stack, but honestly I’m most impressed with the sponsor. That looks sick. And the pricing seems decent too.
Thank you very much for this video. It's really REALLY cool.
In the next videos, could you show us:
- how to use a logging facade + implementation
- how to write tests for this CRUD app using something like @Testcontainers (in Java world)
- how to return the id from the insert statement if the id is from a db sequence. For example, my insert statement is like this: insert into my_table (
id, column_name) values (nextval('my_sequence'), 'some name')
- how to call another web service, how to generate traceId, spanId and have them written in logging messages
- how to use micrometer in Rust
- how to use OpenId, OAuth2 in Rust
FL0 looks really nice. However, the free tier gives us only 256 MB of memory (it might be ok for a Rust app. I'm coming from the Java world, so 256 MB is very little for me). An alternative solution is Oracle Cloud. Its free tier gives you 4 ARM cpu cores, 24 GB of memory, 200 GB hard disk, a free Oracle db which doesn't use those cpu, memory and hard disk (not sure if Rust can work with Oracle db). I can run docker containers there for a Postgres db, a Jenkins server, a Elasticsearch + Fluentd + Kibana for viewing logs.
These are some awesome suggestions! Thank you!
Testcontainers are amazing, I use them for rust projects as well 😁. That's a great idea for a video.
Oracle cloud sounds interesting as well, I'll check it out for another video!
Thank you again
INSERT INTO my_table () values ( RETURNING id;
you can return more columns, or * , as you want
Thanks
I'm curious how many hours did this video take to create? Your production quality is superb.
Would like to see a mirror of this in Go - Perhaps a production-tier course?
Thank you so much! I really appreciate that.
It probably took around 30 hours total. My script initially wasn't that great so I had to re-record a bunch of audio!
That's a great idea! I'll add it to my backlog.
@@dreamsofcodethe idea that you are able to acheive this level of quality in only 30 hours is incredible. Quite in awe of your channel in general, well done! 🚀
@@codetothemoon Thank you! I'm a huge fan of yours as well!
@dreamsofcode @codetothemoon I love both of your channels, and love seeing the mutual respect. Cheers to you both!
Loved the foundation reference!
Such a great book and loving the series
It's so good!
Learnt more about rust here than so many other “intro” to rust.
Techstack deez
nutzzzz
Deez what
@@cyanide5188 🥜
This is insane. everthing is in one. Keep up the good work.
I feel like CRUD should conceptually be replaced by "SSR", or Save, Search, Remove, because there’s no point in having separate create and update endpoints anymore over a single Save method that recognizes by whether an id exists in the body whether the operation is create or update, while get by id and get all are rarely sufficient, and a get with query parameters is generally necessary, and finally remove includes soft deletes (which I hate, btw, so I’d rather not). But hey, SSR is already taken by Server-Side Rendering so nvm who cares…
The `--release` flag should also be added to the `cargo chef cook` command if you're building your app in release mode!
It didn't work out for me. The build failed due to --release flag in cargo chef cook
densely packed with knowledge and great pacing of the video
Awesome video! Helped me solve a lot of problems I was making while building a crud with axum. Would like to see a production ready one
loved the video. really quality stuff here. ❤
Thank you!
Love to see a series diving deeper into production ready features
This was so well done... I'd love to see you do something like this with svelte and maybe some of the more advanced tpoics too.
Excellent video. One important bit missed that's also missing in your repo, the `cargo chef cook` also requires a `--release` flag for the Docker caching to work. Without that, it'll still do a full release build every time on the `cargo build`.
Good catch!
Love your videos! Id love to see your setup for writing elixir apps! Sad it wasn’t chosen here 😂
Loved the Foundation reference. Great book!
Another excellent video of yours! Thank you very much for all the effort you put on your videos.
Answering one question you made at the beginning of your video, I'd love to see how you deploy your applications to a custom home lab machine
Thank you! I appreciate the kind words.
I'm planning on starting another channel very soon which will be more focused on Homelab. I'll make sure to do an announcement when my first video goes live 😁
If only your discord server wouldn't be run by power hungry abusive toxic mods.
Same poor experience here. I asked a question about Neovim and I got several helpful replies. A day later a mod tells me wrong channel (General instead of Neovim help). I politely apologized and thanked him for pointing me to the right channel. Mod continues the conversation by telling me not to do it again. (I didn't) but I apologized again anyway, saying I won't do it again and I know where to post now. Then he keeps pushing for the conversation to go on, and how I should have known better. Not really sure on why he kept pushing for it since I haven't written a single word other than apologizing. So I apologize again and ended the sentence with a smiley face. I was nothing but polite. One minute later he bans me for 24 hours saying that a "smiley face" is considered extremely passive aggressive and he doesn't need such an attitude. I PM him and then he goes on and on how a smiley face is passive-aggressive. He eventually unbanned me. But I gotta say, a person that is so hypersensitive who gets triggered by a genuine smiley face and reads into things that aren't there, and is passive-aggressive himself while accusing others of exactly that, should not moderate your server.
@@nopenope6486 sighs, I have had the same experience in other discord servers, sending a smiley face is somehow "toxic", you should prob send :^), as it is kinda playful and leaves no room for misunderstandings (I hope)
I wish the real world requirements were always this precise.
AWS provides free tier for a lot of things and I'm using it with my projects for years
congratz on 50K subs, soon it will be 100K, your content is good and insightful
1:00 subscribe button glowing as he said to not press it. wth
Hi, I really enjoy your videos !
I'd love to see more production-"ready" content and more Rust backends.
Yes pagination and filtering please
Pagination is so annoying to do.
Excellent video, well structured, and the audio is perfect👌
I would like to say though, having entire lines of code flash in make it VERY hard to follow along. Having your cursor spit out the characters, even when sped up, which you do at times, is much more readable.
Also, Phoenix+Liveview when? 🤩
Thanks for the feedback! It's a real balancing act trying to keep a good pace for entertainment, whilst also allowing people to follow along. I'll try and do better in the future!
I've added to the backlog ;)
best flow ad ive seen so far, the video was good too
Your vid is so asthetic that I keep watching it even I don't know Rust xD
Thank you! That's such nice feedback!
Important missing feature/thing to do: make it so that it does a database migration before deployment.
And why is it not using the database to generate the timestamps ?
Great video, when is part two talking about front-end? 😂
This is a great idea! My front end skills have gotten rusty recently so I need to sharpen them up 😉
@@dreamsofcode You could, of course, write the front-end in Rust with something like Leptos ;)
I will be trying out your sponsor for my new app real soon
Would love to see template engine and htmx integration
The path to success is to take massive, determined action.
I would love to see the production ready version.
Subbing to see most despised tech stack
Really though, it’s because I just realized I wasn’t already subscribed
Haha. I'm scared to do it.
Thanks for the video. Are you using a Neovim distro or is this all custom?
Axum with sqlx is my currently favourite tech stack as 4 now.
I'd love to see more production-"ready" content and more Rust backends.
Your channel is amazing, Please keep up this great work
Great video!! BTW I'm thinking about switching to a Linux distro, particularly the one you have, but I really wanna have it look like your UI which is sick.. A tutorial on this would be great!! Great videos as always.
This is MacOS…
@@FarhadOmid it's not, it's Arch Linux.
@@abplayzzthose windows look just like in MacOS tho
th-cam.com/video/CVCBHHFXWNE/w-d-xo.html
@@FarhadOmid
@@dargkkast6469 I am wondering how does he minimize those windows, there's literally just one button on the window bar...
Hi, you could do a video that goes through all the process of arch linux installation with your setup?
Love your work!
Thank you so much! I appreciate your support a lot!
Would love to see a full course
Awesome content! Thanks.
nice video editing... i want all udemy video like this!!!!!!!
Thank you! I'm working on my own courses in the future. Is there one you'd like to see in particular?
look at the c# behind rust mmmm i love it
Elixer never heard of it till this point
I use Golang and Elixir....enjoy it all. Idk about rust tbh. The complexity of the language doesn't help with fast modifications to existing code bases.
Big fan of all three languages, and for different use cases. Normally I'd go with Golang for a CRUD api, but the survey gods decided!
When you said 'stack' I wronly expected also a Gui setup. Any change to see something like that (Gui+Crud) worked out?
Would you please teach us the necessary concepts to develop a mindset like yours...
Would love to see a full production app using go
I subbed. I'm waiting for that video 😂
This channel is a gem!
Join the Bevy Rust cult! I mean movement
cool. keep learning and keep growing :)
.
Nice! But I think you miss the cargo watch, to automatically build and run you code. 😉
Anyway, good video as always. 👍
3:25 Why `.unwrap()`...? The return type is already a result. Seems like the question mark operator is more correct.
(This is a genuine question... I'm learning too!)
I like your channel. I think you're really good at explaining things. And this one was a good video.
The thing is that I watch your channel to try and be a better developer. A LOT of your latest videos has focused heavily on the sponsor, and sometimes the sponsor is not mainstream at all.
I'm left with the feeling that I just learned something useless.
Again, this doesn't fully apply to this video. Only to a minor extent.
I understand the need to monetize the content, and I hope you keep approaching that balance, but please take this into consideration.
Hey! Thanks for the feedback. I hear you.
Sponsorships are a hard one to balance. I try to match sponsors to content that I already have planned and am trying to get better at making them complimentary to the video itself (rather than being the sole focus). In this video, the product complimented well for getting the app deployed, otherwise I probably would have just ran it locally or on my homelab. The video content itself other than that was pretty much untouched.
As I start producing more content, the ratio of sponsored content should decline, but that's not for a few more months.
Thank you for sticking with me as I try to get better with everything! I'm still pretty new to making content!
why wasnt a Result return in case of update , but was returned in case of create and read ??? @op
very good video
more like this would be cool
HOLD ON!! You can make the sub button RGB for the push? What sorcery is this??
thanks
Delete should return 204 in case of success
I like Rust, but I'm afraid of starting a real production project using it, because I don't want to shoot myself in the foot. I've heard async Rust have a lot of complicated stuff which makes it extremely easy to shoot yourself in the foot instead of getting BLAZING FAST™ performance. A
ssuming I need something a bit more complicated than just a CRUD API (or some easy CRUD project at first will grow into something complex).
That's why I stick with Go and TypeScript for real world applications. And also Rust developers are still rare on the job market.
thank you!
Thank you so much! I really appreciate the support.
Production!
Why the heck does that Dockerfile consist of FOUR stages that almost do nothing? I mean, one build stage is for providing a base for two other build stages, which look like they could do their stuff in one build stage. Is this necessary in rust or why is the "cargo chef prepare" in a different build stage than the "cargo chef cook" and "cargo build"? Seems overcomplicated to create a new build stage for every command but copying everything over from the previous stage. The only thing I could think of is optimizing container build time by making better use of layer caching, although this doesn't seem that significant here.
Agreed. It's not how I would normally write a dockerfile. I also don't believe you need to use their reference one either (I tried it out on another project and it worked fine).
You should be good with a more concise dockerfile.
bro can spawn code out of nowhere 💀
Very nice video thanks
I really like the video and trying to follow along. Just stuck with an error compiling after adding the create_quote handler. Is the code available on github?
lets get him to 75k boys! we forcing him to try out the dreaded.
bro i'm waiting for next video in flutter setup on nvchad please make make make .......!!!!!
Deal. I've added it as the next one in the series.
Mine could be Zig, Sveltekit, supabase
I like zig but the documentation of the standard library is horrible. Better documentation imo would make it more attractive.
CRUD in language with possible use after free? No way
what is the plugin for toml to know latest version? thank you for the content 🤙
Tempted to subscribe now!
such a nice and cheap to run on cloud stack
Why are you including a whole Rust toolchain in the deployed container?
Yeah, there's no need to do so. I was just copying the example on the fl0 website. I probably wouldn't use the chef base image either in a personal project but wanted to make it as easy to follow as possible.
For the update handler, shouldn't it be sensible to use PATCH instead of PUT?
PUT is where you can add a resource with the properties without failing as in "already exists". PATCH is to update a resource's properties
A great question! I typically prefer PUT to PATCH for updating. PATCH is used for partial updates, rather than replacing the resource in its entirety.
Gotta love SQL injection ;)
What editor are using?
12:50 ❣❣❣❣❣❣❣❣
Time changes everything except something within us which is always surprised by change.
Gigachads uses the most hated stack in production
Actually JS is most loved (desired).
Man I would love to see you build on Elixir... There is already lots of Rust content. Even though I love Rust, It would be nice to see Elixir + Phoenix on your channel.
Agreed!! 🎉
what's that font tho ?
Where are the tests?
They're in the 60 minute video 🤣
Could have used Svelte + Rust for the API.
I personally hate docker with a passion. As soon as a I see shit that doesn't touch the file system and is compiled with it's deps using docker, I blow a fuse.
What do you hate about it?
@@dreamsofcode the fact that every docker user thinks that they are Google?
Cobol on wheelchair!
What's that font?
Fl0 silently fails on sign-up request.
Can u so 1 for deploying a phinix app?
This is a great idea
@dreamsofcode
Thx. I am just working on 1 rn and I asked for what I needed
Who the fk put python that high in language they love???
nice
🔥🦀