From 363adc50c83ca0cd576961c0f9cf4a74bc4b239c Mon Sep 17 00:00:00 2001 From: Sean Mitchell Date: Fri, 15 Nov 2024 10:06:57 -0800 Subject: [PATCH] Remove unused video assets --- assets/videos/rails7-screencast-english.vtt | 1185 ------------------- assets/videos/rails7-screencast-poster.jpg | Bin 104638 -> 0 bytes 2 files changed, 1185 deletions(-) delete mode 100644 assets/videos/rails7-screencast-english.vtt delete mode 100644 assets/videos/rails7-screencast-poster.jpg diff --git a/assets/videos/rails7-screencast-english.vtt b/assets/videos/rails7-screencast-english.vtt deleted file mode 100644 index a2edd753..00000000 --- a/assets/videos/rails7-screencast-english.vtt +++ /dev/null @@ -1,1185 +0,0 @@ -WEBVTT -Kind: captions -Language: en - -00:00:00.160 --> 00:00:04.640 -Welcome to Ruby on Rails. We're going to build  -a demo blog to demonstrate how to get started   - -00:00:04.640 --> 00:00:10.880 -with the framework, build something real, and then  -deploy to production. Let's go. We're going to start with   - -00:00:10.880 --> 00:00:18.400 -the creation of the Rails skeleton. This includes  -all the default directories and some stock files   - -00:00:18.400 --> 00:00:23.840 -for you to fill in with all your content and it  -also sets up all the dependencies that the Rails   - -00:00:23.840 --> 00:00:29.840 -framework uses by default now that we have this  -skeleton we can start by generating the first   - -00:00:29.840 --> 00:00:38.000 -model for our blog a post model that's going  -to have a string as a title and a text field   - -00:00:38.000 --> 00:00:46.320 -as content we're using this generator to create  -the files needed for the controller for the post   - -00:00:46.320 --> 00:00:50.400 -model for the views for everything  -let's have a look at what's been created   - -00:00:52.240 --> 00:00:56.960 -the first thing we're going to have a look at  -is the migration the migration is what sets   - -00:00:56.960 --> 00:01:03.920 -up the database table and as you can see here we  -designated that we want a string title and a text   - -00:01:03.920 --> 00:01:11.200 -content and then by default rails also adds a set  -of timestamps for created at and updated ad this   - -00:01:11.200 --> 00:01:17.680 -is then connected to the post model that will  -instantiate and encapsulate these database rows   - -00:01:18.480 --> 00:01:25.760 -which again is invoked by the posts controller  -it has all the actions needed to encapsulate a   - -00:01:25.760 --> 00:01:33.520 -rest style approach to developing web applications  -you have the seven default actions and a handful   - -00:01:33.520 --> 00:01:40.560 -of these actions then have templates like index  -show new and edit i could show you one of those   - -00:01:42.160 --> 00:01:47.120 -and that is basically all we need  -to get started with the most basic   - -00:01:47.120 --> 00:01:57.680 -uh outline of a web application so we will run  -the migration as the first thing to set up the   - -00:01:57.680 --> 00:02:06.160 -database and set up the post table and then we can  -have a look at that schema that's been generated   - -00:02:06.160 --> 00:02:11.840 -for us as you can see now it just has the post  -table in there let's have a look at how that looks   - -00:02:12.480 --> 00:02:19.760 -in the browser so we start the rails server and  -then we jump over to the browser and as you can   - -00:02:19.760 --> 00:02:25.040 -see here it just gives us a nice boot screen  -that shows the version of rails that we're using   - -00:02:25.040 --> 00:02:30.800 -and the version of ruby but our new app that we  -created with the scaffold lives under slash posts   - -00:02:32.720 --> 00:02:41.600 -it is the basic crud app hello world we create a  -new post first post and when we post that it'll   - -00:02:41.600 --> 00:02:48.880 -go to the create action which will redirect to  -the show action and then we can go back to the   - -00:02:48.880 --> 00:02:54.560 -index action i've done this demo a bunch of  -times before and it's always looked like this   - -00:02:54.560 --> 00:03:02.160 -it's not very nice so for this demo i'm going  -to pop in the simple css framework straight off   - -00:03:02.160 --> 00:03:07.680 -the cdn so system we can have something slightly  -nicer to look at and i'll do that by going to the   - -00:03:08.320 --> 00:03:17.040 -default layout that all the views are rendered  -within and i'm just going to pop in the symbol css   - -00:03:17.680 --> 00:03:24.160 -styles and then let's have a look if that  -doesn't look a little better it sure does okay   - -00:03:24.160 --> 00:03:32.240 -so now we have the crot actions not just  -for html but actually also for a json api   - -00:03:32.240 --> 00:03:37.440 -if i do json behind the post here you'll see the  -entire collection currently consisting just of one   - -00:03:37.440 --> 00:03:44.560 -element returned as json that you could hook up  -to a single page application exposes a public api   - -00:03:44.560 --> 00:03:49.760 -whatever you want if we jump back and take a  -quick look here at the controller you can see that   - -00:03:49.760 --> 00:03:56.480 -this is all mapped up and for these actions that  -create an update we have different paths whether   - -00:03:56.480 --> 00:04:03.760 -you are submitting from html or whether you're  -submitting from json okay let's actually start   - -00:04:05.040 --> 00:04:08.720 -developing our domain model so the  -first thing we could do is we could add   - -00:04:08.720 --> 00:04:17.680 -validations to the post we could say validates  -presence of title and now if we go to   - -00:04:18.800 --> 00:04:26.000 -attempt to make a new post that has no title  -we will get an error that simply says this   - -00:04:26.000 --> 00:04:32.160 -can't be saved because the title can't  -be blank that error is generated by the - -00:04:35.200 --> 00:04:42.800 -the form html that we have the template  -here we have under app views posts form   - -00:04:42.800 --> 00:04:47.760 -and see if there are any errors it'll show all  -these errors first and you can trace that all   - -00:04:47.760 --> 00:04:53.040 -the way through from the create as we go through  -the create action we tried first to save if that   - -00:04:53.040 --> 00:04:58.240 -is successful then find the post that's created  -and redirect if it's not successful we will   - -00:04:58.240 --> 00:05:04.800 -render the new action again as an unpossible  -entity with those error messages in there   - -00:05:06.560 --> 00:05:11.840 -that is a user error if you will we can also  -make a programmer error here and see what that   - -00:05:11.840 --> 00:05:17.040 -looks like if we reference the wrong variable  -and then try to load it we can see we get this   - -00:05:18.400 --> 00:05:23.680 -error screen in development that shows the  -exception being raised and the back trace where   - -00:05:23.680 --> 00:05:30.880 -it's coming from and then we actually also have  -a console built right into the error screen that   - -00:05:30.880 --> 00:05:38.000 -lets you manipulate and look at all the variables  -that have been assigned in there now that console   - -00:05:38.000 --> 00:05:45.840 -is also accessible um from the command line we  -can jump in and start a brand new console here   - -00:05:45.840 --> 00:05:52.000 -and interact with the main model that we've been  -building up if we go to first post first it'll   - -00:05:52.000 --> 00:05:55.600 -fetch the first post that we created this was the  -one we created through the web interface but we   - -00:05:55.600 --> 00:06:06.080 -can create a another one through this console as  -well if we do title from the console content nice   - -00:06:07.840 --> 00:06:13.120 -we'll see you start a transaction insert into  -the posts table and there we have it another   - -00:06:13.120 --> 00:06:19.120 -post object we can also create these objects for  -example just post all will get us everything if   - -00:06:19.120 --> 00:06:27.600 -we want to find just some of it we can for example  -query on created ad we could do time now all day   - -00:06:27.600 --> 00:06:32.240 -that'll create a range for the entire day we'll  -see we find still the same two posts you can see   - -00:06:32.240 --> 00:06:37.840 -what that sql statement actually looks like in  -total we can try one where we don't find anything   - -00:06:37.840 --> 00:06:44.480 -time now yesterday didn't have anything posted  -then that's the sequel for it and this is the   - -00:06:44.480 --> 00:06:52.080 -empty array that's returning back okay great  -but having a blog that simply just accepts   - -00:06:52.080 --> 00:06:58.480 -content as plain text is a little boring so you  -use another set of rails features um this is   - -00:06:58.480 --> 00:07:04.800 -action text we're going to add to get what you  -see is what you get editing for our new blog   - -00:07:04.800 --> 00:07:13.200 -we'll start here by adding the action text  -elements rails action text install we'll add   - -00:07:13.920 --> 00:07:20.160 -a little bit of javascript that we need it'll  -add some css for the new editor and it'll add   - -00:07:20.160 --> 00:07:26.640 -a set of migrations for us to upload and store  -files using active storage in this example we're   - -00:07:26.640 --> 00:07:33.120 -just storing locally when you deploy to production  -you can store on s3 or other cloud storage setups   - -00:07:33.120 --> 00:07:38.720 -it also adds an image image processing gems  -so we can make variants of the files that we   - -00:07:38.720 --> 00:07:45.440 -upload so that we can get smaller versions of the  -images or otherwise so we'll bundle to get that   - -00:07:46.560 --> 00:07:51.360 -image processing gem on there and then  -we'll run railsdb migrate to pick up the   - -00:07:51.360 --> 00:07:58.880 -couple of migrations we have now we have to set  -up the model to say that we're going to use this - -00:08:01.040 --> 00:08:08.240 -rich text setup and do has rich text content  -and then if we jump to the form for that   - -00:08:08.240 --> 00:08:11.840 -instead of having a text area we  -can add it as a rich text area   - -00:08:13.200 --> 00:08:18.560 -now we just have to restart the server because  -we added a new gem and then we can jump over and   - -00:08:18.560 --> 00:08:27.600 -see what our new posts look like oh we left the  -error in there gotta pick that out again let's   - -00:08:27.600 --> 00:08:35.600 -do that and then reload great now you see that  -the content is not just the plain text field   - -00:08:36.480 --> 00:08:45.440 -this is rich we can use rich text we can do  -the various forms of markups we have in here   - -00:08:45.440 --> 00:08:52.320 -and we can even do file uploads so file  -uploads can simply be dragged and dropped into   - -00:08:53.360 --> 00:08:59.040 -our editor here it'll upload it in  -the background via active storage   - -00:08:59.600 --> 00:09:06.640 -to either local as we're doing here in development  -or with direct upload to cloud storage but we're   - -00:09:06.640 --> 00:09:14.560 -just going to do it here rails logo and then  -we create the post great so now we have a post   - -00:09:15.440 --> 00:09:18.400 -it has an image attached and if we  -go back to all the posts we can see   - -00:09:19.200 --> 00:09:26.080 -both of the posts that we've put in there let me  -show you how the javascript for that is set up   - -00:09:27.120 --> 00:09:34.320 -rails by default uses something called import  -maps which allows us to use advanced javascript   - -00:09:35.200 --> 00:09:40.000 -without having node installed on  -our system we're simply using the   - -00:09:40.000 --> 00:09:46.080 -javascript as text and serving through the  -browser and using esm to to deliver that   - -00:09:48.000 --> 00:09:55.120 -this is set up in terms of what we can use in  -our map or in our app as this import map um   - -00:09:55.120 --> 00:10:00.880 -the default is this stuff up here rails ships with  -hot wire by default turned on that means the turbo   - -00:10:00.880 --> 00:10:06.560 -framework and the stimulus framework is already  -set up and ready to use and then when we ran the   - -00:10:06.560 --> 00:10:14.560 -action text installed generator it also added the  -tricks and action text pins and as you can see   - -00:10:14.560 --> 00:10:21.440 -here the application.js then imports tricks and  -action text and that is what makes those available   - -00:10:22.240 --> 00:10:28.800 -to our application so that we can use it but what  -if we wanted to add some other javascript from npm   - -00:10:30.080 --> 00:10:38.480 -let's have a look at that we will add a piece  -of javascript for localizing the timestamps   - -00:10:38.480 --> 00:10:46.240 -that these posts were created on our blog both  -localizing and using time ago setups so we will   - -00:10:46.240 --> 00:10:56.160 -use the bin stop import map and we will pin local  -time it will fetch that off npm figure out which   - -00:10:57.760 --> 00:11:04.400 -url it should use based off the default cdn that  -we're using for this javascript that is jspm   - -00:11:05.280 --> 00:11:10.400 -i'll show you later how you can also download  -that but we're just going to depend on the cdn   - -00:11:10.400 --> 00:11:15.760 -at this time so now we've added  -local time to our import map   - -00:11:15.760 --> 00:11:21.600 -let's see it right here now we can also  -import it and start using it as part of our   - -00:11:23.200 --> 00:11:28.000 -application.js we'll import local time from  -local time and then we'll start that local   - -00:11:28.000 --> 00:11:41.840 -time now we can use this have a look at the post  -here we will pop in a new bit where we can have a   - -00:11:43.120 --> 00:11:48.480 -posted and then have a time tag and  -this time tag will generate an html   - -00:11:48.480 --> 00:11:54.640 -time tag which the local time javascript  -will identify look at the data local   - -00:11:55.280 --> 00:12:04.960 -attribute it says time it goes it'll convert that  -utc time into time ago and that's all done in the   - -00:12:05.760 --> 00:12:10.640 -in the browser which means it's cache  -safe which is a lovely way to present time   - -00:12:10.640 --> 00:12:17.120 -so let's have a look at that jump here to the  -browser post it ten minutes ago posted six   - -00:12:17.120 --> 00:12:26.400 -minutes ago three minutes ago so this is all using  -npm directly it does not require node of any kind   - -00:12:26.960 --> 00:12:35.360 -does not require npm installed on your local  -machine this is all running off a api using jsp m   - -00:12:36.000 --> 00:12:44.160 -the cdn but you could also just add these pins to  -your application yourself wherever you want them   - -00:12:45.840 --> 00:12:52.880 -they can be off your own cdn setup or it can be  -off any of the other cdns that are out there like   - -00:12:52.880 --> 00:12:59.920 -js deliver but we could also download this local  -time instead of having it as a cdn dependency   - -00:12:59.920 --> 00:13:05.600 -let's do that um we'll download it instead and  -as you can see here it's going to download it   - -00:13:05.600 --> 00:13:13.120 -to vendor javascript local time js and when we  -jump back into see there we can see that that pin   - -00:13:13.120 --> 00:13:16.320 -is automatically mapped there we just  -get a little comment of which version   - -00:13:16.320 --> 00:13:21.280 -that we're using and if we jump over  -to the browser it works just the same - -00:13:23.760 --> 00:13:33.840 -great so now our little blog has posts  -with localized times has a way to use   - -00:13:35.120 --> 00:13:40.640 -a trix editor to use what you see is what you  -get but we would also like to add some comments   - -00:13:40.640 --> 00:13:46.240 -to this because that'll allow us to show the  -relationship within a domain model between   - -00:13:46.240 --> 00:13:54.320 -multiple models at once so we'll go back to the  -terminal here and use our generator again instead   - -00:13:54.320 --> 00:14:00.400 -of rails generate we can also just do rails g and  -instead of a scaffold we'll do a resource which   - -00:14:00.400 --> 00:14:06.000 -adds just a thinner wrapper around the model  -that we're adding here we're going to add a   - -00:14:06.000 --> 00:14:12.640 -comment and that comet is simply going  -to have a post references which creates   - -00:14:13.280 --> 00:14:19.440 -a foreign key setup and a dependency in the model  -that this belongs to the post and it's also going   - -00:14:19.440 --> 00:14:24.960 -to have a content that's also just going to  -be text as you can see it creates another - -00:14:27.120 --> 00:14:33.280 -migration and you can have a look at that quite  -similar you see it sets up the reference it will   - -00:14:33.280 --> 00:14:38.320 -create a foreign key for that reference it becomes  -the post underscore id and then it has a text   - -00:14:38.320 --> 00:14:47.840 -column for the content for us to use so let's  -run that migration and have a look at the main   - -00:14:47.840 --> 00:14:54.480 -model that we've just created rails console will  -find the first post and that post has comments - -00:14:56.960 --> 00:15:04.320 -oh it doesn't have comments yet because we have  -not yet connected um as you can see here the   - -00:15:04.880 --> 00:15:10.000 -comment model belongs to the post but we also  -need to tell the post that the post has many   - -00:15:11.200 --> 00:15:18.000 -comments now if we pop back into the console  -here we can actually just reload in line and   - -00:15:19.840 --> 00:15:25.840 -voila updates to the main model live there are no  -comments right now so let's create the first one   - -00:15:27.280 --> 00:15:34.480 -it's going to have content of first comment  -there we go now we have a post in the system   - -00:15:34.480 --> 00:15:41.600 -that has comments but we don't have any way  -of seeing that in our web ui so let's add that   - -00:15:41.600 --> 00:15:52.000 -to the web ui jumping back in here and then going  -to um the post we're just going to have it on the   - -00:15:53.040 --> 00:15:59.920 -show template on the show template here  -we're going to render all the comments   - -00:16:01.600 --> 00:16:04.640 -we'll actually do a partial  -for it that'll be post slash   - -00:16:04.640 --> 00:16:10.000 -comments we'll pass in instant variable  -of postsystem we just use local variables   - -00:16:11.520 --> 00:16:17.040 -and let's do comments here and i've  -pre-baked some html that we can just pop in - -00:16:21.280 --> 00:16:27.360 -there we go so this will render all the  -comments that belong to this post this   - -00:16:27.360 --> 00:16:32.400 -is shorthand for what you see up here we're  -going to render the partial of comments comment   - -00:16:32.400 --> 00:16:37.200 -with a collection of posts so it iterates over  -those and then we will also render a new form   - -00:16:37.200 --> 00:16:40.240 -so let's create those partials  -first we create the comment one - -00:16:43.440 --> 00:16:49.440 -and i'm also just going to pop that in it's just  -going to be a basic div that has an id which we   - -00:16:49.440 --> 00:16:56.000 -will later use for live updating of stuff it has  -the comment content and we're using that time tag   - -00:16:56.000 --> 00:17:04.320 -again with um a time ago to see when the comments  -were posted and we're also going to create a um   - -00:17:04.320 --> 00:17:12.080 -partial for the new form so that we can create new  -comments on our post as you can see here we use   - -00:17:12.080 --> 00:17:17.840 -a helper called form width it uses the model then  -we pass into it actually we're going gonna pass in   - -00:17:18.640 --> 00:17:25.760 -local variable here um and the comment and um  -and there we go and then actually let's also   - -00:17:25.760 --> 00:17:32.400 -pop in a little notice on the comment itself or  -on the post itself just a counter to show how   - -00:17:32.400 --> 00:17:43.120 -many comments were uh posted on that we use one of  -those helpers pure lies pluralize that will go one   - -00:17:44.160 --> 00:17:52.480 -comment to comments and you'll see that in the ui  -in just a second here although we also actually   - -00:17:52.480 --> 00:17:57.680 -need to add the comments controller it starts out  -as just this empty shell here in order to be able   - -00:17:57.680 --> 00:18:04.560 -to create any comments we need a create action  -we're going to set that up with some prepaid here   - -00:18:04.560 --> 00:18:10.000 -before any of the actions are loaded we run  -a callback called setpost that will plug out   - -00:18:10.000 --> 00:18:16.160 -the post id from the url since we know which post  -that these comments are supposed to be created for   - -00:18:16.720 --> 00:18:22.720 -it will then take the parameters from the form  -and their scope by comment it'll require that   - -00:18:22.720 --> 00:18:27.680 -which means that if the comment scope is not  -present it'll erase an exemption exception   - -00:18:27.680 --> 00:18:34.400 -telling us that and then will only permit a allow  -list of attributes in this case just content   - -00:18:34.400 --> 00:18:37.760 -says that you can't sneak anything  -else in you can't set a different   - -00:18:39.680 --> 00:18:46.320 -foreign key or id and corrupt the system this is  -just one of those security benefits that you have   - -00:18:46.320 --> 00:18:52.880 -in rails out of the box great let's have  -a look and see what that looks like we   - -00:18:52.880 --> 00:19:03.520 -are now on post we'll go to this post  -and see we are missing the route that   - -00:19:04.640 --> 00:19:09.760 -post comment is supposed to look up and that's  -because we i forgot to edit the routes file   - -00:19:09.760 --> 00:19:16.480 -so the resources generator adds this comments  -uh resources but it's of course at the root   - -00:19:16.480 --> 00:19:20.880 -and what we want it is to have it nested  -such that the comments belong to the post   - -00:19:22.080 --> 00:19:29.520 -great see there are zero comments so far but  -we have our um form down here let's do let's do   - -00:19:30.080 --> 00:19:35.920 -one comment we'll create that comment  -and there we go we have our comment   - -00:19:37.600 --> 00:19:43.920 -and have a quick look at the console for  -the the log for this you see here we do   - -00:19:44.480 --> 00:19:50.320 -started a post against posts slash three slash  -comments this is the nested route that we have   - -00:19:51.600 --> 00:19:59.120 -here are the parameters it's using an authenticity  -token to make sure that we don't have any csrf   - -00:20:00.240 --> 00:20:04.080 -exploits and as you can see here it's even  -filtered just it doesn't show up in the log   - -00:20:04.080 --> 00:20:08.720 -we also filter other things like passwords and  -stuff that you shouldn't be putting into your   - -00:20:08.720 --> 00:20:15.280 -logs and then you could see the parameters um  -this was the required scope comment and it just   - -00:20:15.280 --> 00:20:21.200 -has one attribute that is going to be the content  -and what that content actually is then here you   - -00:20:21.200 --> 00:20:28.960 -can see setpost is calling um that id the three  -from up here it looks it up since we have the   - -00:20:28.960 --> 00:20:35.200 -post it proceeds then inserts the comments and  -when it's done it redirects to post number three   - -00:20:35.200 --> 00:20:42.640 -and that renders everything again so now we have  -a blog that has posts and those posts can have   - -00:20:42.640 --> 00:20:47.840 -comments but let's add another feature of  -rails let's add a mailer such that when a new   - -00:20:48.560 --> 00:20:55.680 -comment is posted the owner of the blog gets a  -email letting the person know that a new comment   - -00:20:55.680 --> 00:21:00.160 -has been posted so we use another generator  -for a mailer here um and that mail is going   - -00:21:00.160 --> 00:21:05.120 -to be called the comments mailer and it's just  -going to have one action on it called submitted   - -00:21:06.640 --> 00:21:10.880 -you see this generator of course does not  -generate any migrations just a bunch of   - -00:21:10.880 --> 00:21:17.040 -files for us to play with so first thing we're  -going to edit is the comments mailer and you   - -00:21:17.040 --> 00:21:21.680 -can see it's just a stub here we're going to  -be passing in the comment that we want to let   - -00:21:21.680 --> 00:21:24.720 -the owner know about we're going to  -assign that to an instant variable   - -00:21:24.720 --> 00:21:29.840 -such that it's available in the view we're  -going to mail that to let's say the blog   - -00:21:30.880 --> 00:21:35.440 -owner at example.com and we're going  -to set a subject for this email to be   - -00:21:36.080 --> 00:21:43.440 -new comment then we can edit the templates that go  -with this comment mailer that forms the content of   - -00:21:43.440 --> 00:21:49.920 -the email that's going to be sent out so that's  -going to be submitted html i have one that's   - -00:21:50.720 --> 00:21:56.320 -pre-baked we can just pop in and the neat thing  -here you can see is we're reusing the same partial   - -00:21:56.320 --> 00:22:04.080 -templates the comments comment template the html  -template for the html part of the email as well   - -00:22:04.080 --> 00:22:08.160 -this is how a lot of things in rails work  -that you can use the same templates across   - -00:22:08.160 --> 00:22:13.360 -things like emails the first render live  -updates you're never recreating templates   - -00:22:13.360 --> 00:22:18.080 -more than once and then of course we also have  -the plain text version of the email where we're   - -00:22:18.080 --> 00:22:23.440 -not going to use that partial we're just going  -to pop it in as plain text rails has this newest   - -00:22:23.440 --> 00:22:28.640 -feature a neat feature where we can actually  -see what these emails are going to look like   - -00:22:30.160 --> 00:22:35.120 -we are going to use one of these previews  -and it's going to just preview whatever   - -00:22:35.120 --> 00:22:42.080 -the first comment is and we can jump to this  -url in a browser to see what that looks like   - -00:22:43.440 --> 00:22:49.680 -you got a new comment on hello world first comment  -that's the html version here's the plain text   - -00:22:49.680 --> 00:22:56.960 -version and now we know that the mailer itself  -works let's hook the mailer up to our flow such   - -00:22:56.960 --> 00:23:02.560 -that when a new comment is created we will also  -send out the email so we have the comments mailer   - -00:23:02.560 --> 00:23:07.840 -it has the submitted action we're going to pass in  -the comment that is being created in this action - -00:23:10.000 --> 00:23:16.320 -and then we're going to deliver later deliver  -later we'll use a asynchronous job queue such that   - -00:23:16.320 --> 00:23:22.480 -neither the rendering of the html for this  -mailer nor the delivery of the email itself   - -00:23:22.480 --> 00:23:27.600 -happens in line it happens asynchronously  -much faster response time in the ui   - -00:23:28.160 --> 00:23:34.960 -and that's pretty neat so let's um see  -if that actually works we'll jump over to   - -00:23:35.840 --> 00:23:42.560 -the browser again jump back to our  -post and then send a comment via email   - -00:23:44.080 --> 00:23:49.520 -create that comment and we can see whether it's  -been sent by checking the log scrolling back here   - -00:23:49.520 --> 00:23:54.720 -and you can see the email is being sent it's  -being sent to blog owner it has that subject   - -00:23:54.720 --> 00:24:00.960 -of new comment it's rendering a mime part for  -the html and my part for the clear text and   - -00:24:00.960 --> 00:24:05.600 -if you look up here you can see the deliver  -later is set up as an action mailer delivery   - -00:24:05.600 --> 00:24:13.680 -job which is this out-of-band asynchronous setup  -in production we would use a full queuing system   - -00:24:14.400 --> 00:24:23.520 -rescue or something else like that in development  -it is just happening in line great now we have a   - -00:24:23.520 --> 00:24:30.560 -blog that can also send email let's make this  -blog live and we're going to use the default   - -00:24:31.120 --> 00:24:38.400 -wire stack or at least one part of it the turbo  -part of it to make adding comments a live event   - -00:24:39.440 --> 00:24:46.160 -and it is surprisingly simple as you saw before  -when we looked at the application js hotwire is   - -00:24:46.160 --> 00:24:51.840 -already configured in a new rails app so we  -can simply start using it so we're going to   - -00:24:51.840 --> 00:25:01.920 -start using it by setting up a subscription to  -a turbo stream on the post um show action we're   - -00:25:01.920 --> 00:25:07.440 -going to use this turbo stream from and then the  -name of the stream we're going to use is going   - -00:25:07.440 --> 00:25:13.120 -to be derived from the post um since it has an  -exclusive stream for the comments that are posted   - -00:25:13.120 --> 00:25:22.800 -is that and then when a comment is created we're  -going to let it broadcast um to the post that will   - -00:25:22.800 --> 00:25:33.360 -broadcast both uh creates updates and destroys  -which we can now demonstrate so let's jump over to   - -00:25:35.120 --> 00:25:42.240 -our browser and then let's actually make another  -browser such that we can have them side by side   - -00:25:42.240 --> 00:25:50.800 -and see that this stuff is happening live okay  -let's scroll down here is this a live comment - -00:25:52.880 --> 00:26:00.160 -it sure is it showed up over here as well  -because via web sockets we're delivering   - -00:26:00.160 --> 00:26:04.880 -all these updates that are made to  -the comments they're being broadcast   - -00:26:04.880 --> 00:26:11.920 -whether they're being invoked from a web ui is  -here or if they're being invoked from the console   - -00:26:13.360 --> 00:26:20.800 -as well since it just goes through the rails  -domain model so we could do here find the post   - -00:26:20.800 --> 00:26:25.840 -3 and then look at the comments we have those  -comments we could take a look at the last one   - -00:26:25.840 --> 00:26:32.080 -and what would happen if we destroyed last  -one boom it's gone and it's gone because   - -00:26:32.080 --> 00:26:37.600 -when we destroy the last one a callback is  -being triggered by that setup of broadcast 2   - -00:26:37.600 --> 00:26:44.320 -that will broadcast this turbostream element  -remove and the target is comment underscore id   - -00:26:44.320 --> 00:26:49.680 -which matches the dom id we had set up for the  -partial for the individual comment we can also   - -00:26:49.680 --> 00:27:02.240 -update here from the console so if we do a update  -of the content content uh updated from console you   - -00:27:02.240 --> 00:27:07.760 -can see that that update is sent out as well that  -update contrary to the delete update is actually   - -00:27:07.760 --> 00:27:13.360 -done asynchronously because we're rendering  -a template so that also happens out of band   - -00:27:14.400 --> 00:27:19.280 -and there you have it creates updates and deletes  -are all broadcast automatically and of course you   - -00:27:19.280 --> 00:27:25.360 -can tweak this and set it up to your heart consent  -but simply adding the broadcast to will do it for   - -00:27:25.360 --> 00:27:31.920 -all the three actions by default when you follow  -the conventions okay we've created quite a lot   - -00:27:31.920 --> 00:27:37.040 -of code let's have a look and see if we also have  -some tests and of course we do because all these   - -00:27:37.040 --> 00:27:43.360 -generators we've been running have been creating  -stop testing that actually exercises the app   - -00:27:43.360 --> 00:27:50.480 -and if we run those with rails test we'll see a  -couple of them failing we have one failing because   - -00:27:50.480 --> 00:27:56.800 -of a invalid foreign key and that happens  -when we go to destroy the post then you have   - -00:27:56.800 --> 00:28:02.960 -comments that depend on that post now having  -an invalid foreign key so we can fix that first   - -00:28:03.760 --> 00:28:10.400 -by jumping back into the post model and instead of  -just saying has many comments we'll also say that   - -00:28:10.400 --> 00:28:16.240 -they are dependent and they will be destroyed when  -we destroy a post then let's run the tests again   - -00:28:17.440 --> 00:28:22.240 -now that test is no longer failing we still  -have a failing test for the comments mailer   - -00:28:22.240 --> 00:28:24.560 -because that is of course just generated off   - -00:28:25.840 --> 00:28:35.360 -the defaults that weren't tweaked we'll use um a  -fixture here if you have a look at com gml you'll   - -00:28:35.360 --> 00:28:40.960 -see we set up fixtures for all models that are  -generated through the generators such that you can   - -00:28:41.840 --> 00:28:47.120 -set up a set of fixtures that you can refer to  -in your text in your tests that run very fast   - -00:28:47.120 --> 00:28:53.120 -and then i also remember we changed the subject  -to new comment and then we sent this to the blog   - -00:28:53.760 --> 00:28:58.080 -owner and it was from example we're not  -going to match on the body right now   - -00:28:58.880 --> 00:29:05.440 -let's go back and run that boom all our  -tests are passing on our new wonderful blog   - -00:29:05.440 --> 00:29:11.840 -that does what you see is what you get  -editing it does comments it does live comments   - -00:29:13.280 --> 00:29:18.880 -and now our application as such is is done  -but what if we wanted to show other people   - -00:29:18.880 --> 00:29:24.960 -this application let's deploy this to production  -and i'm going to use heroku to do this because   - -00:29:24.960 --> 00:29:32.560 -heroku is nice and simple and easy to use but  -where the rail skeleton by default is started   - -00:29:32.560 --> 00:29:40.080 -with sql lite as the database heroku uses  -postgres but thankfully there is a command here   - -00:29:40.640 --> 00:29:46.640 -railsdb system change where we can change  -the configuration of our database to use - -00:29:49.680 --> 00:29:55.280 -postgres instead that will add the postgres  -adapter so we'll have to bundle for that   - -00:29:56.480 --> 00:30:04.480 -and then we can add um everything to  -git because that is how we will push   - -00:30:04.480 --> 00:30:10.400 -to heroku so we'll add everything to git we will  -commit everything that we've added as first here   - -00:30:10.960 --> 00:30:17.920 -and then we will create the heroku setup  -that we're going to deploy our app to   - -00:30:19.440 --> 00:30:25.920 -and once we've done that we can push  -our app straight to heroku heroku   - -00:30:26.480 --> 00:30:31.840 -main and we're going to get a little error  -here in just a second that we can correct   - -00:30:33.120 --> 00:30:38.320 -because there is a check here and you can see this  -is failing because i'm making this demo on an m1   - -00:30:38.320 --> 00:30:46.240 -machine and heroku is not running on an arm64 so  -we just have to add x64 here as our platform for   - -00:30:46.240 --> 00:30:53.600 -the bundle lock we'll do that and then we'll  -add the um gem file lock again commit that - -00:30:55.840 --> 00:31:03.840 -added the platform and then we can push again - -00:31:08.960 --> 00:31:15.360 -and now we have deployed our app to heroku  -we've been assigned the mighty tundra   - -00:31:16.000 --> 00:31:21.360 -as our url for this and we can go have  -a look at that in just a second we need   - -00:31:21.360 --> 00:31:24.080 -to do a couple more things we need to first of all   - -00:31:24.080 --> 00:31:31.840 -migrate our database which will also set  -it up or we use heroku run rake db migrate - -00:31:34.320 --> 00:31:39.280 -and then we need to add redis  -as an add-on to our heroku setup   - -00:31:39.280 --> 00:31:45.840 -because red is is used by the turbo setup  -to send those live updates back and forth   - -00:31:47.680 --> 00:31:53.760 -great now everything should be setting up so let's  -have a look at our live app deployed in production - -00:31:56.800 --> 00:32:03.520 -i can use this one here and you see the page  -you're looking for doesn't exist and that's   - -00:32:03.520 --> 00:32:08.880 -because we haven't actually set up a root route  -in our application so let's do that if we go back   - -00:32:08.880 --> 00:32:14.000 -to the routes here you'll see there's actually  -a comment just for that purpose so we'll set it   - -00:32:14.000 --> 00:32:19.600 -up so when you go to the root it'll go straight  -to the posts index and we will commit that setup - -00:32:23.280 --> 00:32:32.160 -we'll add it and commit it adding the root  -route and then we can push that again to heroku - -00:32:36.000 --> 00:32:40.000 -now that's set up so let's have a look  -and see if the app works in production   - -00:32:40.800 --> 00:32:48.080 -there we go we have an empty one of course because  -it's a brand new database this is the first post - -00:32:52.240 --> 00:32:56.880 -now the only thing that does not work yet  -here in production is drag and dropping   - -00:32:56.880 --> 00:33:05.280 -files because heroku would require us to set up  -s3 and you can use that as an exercise for the   - -00:33:05.280 --> 00:33:09.920 -reader for you to set that up but it is quite  -easy to do just a matter of a little bit of   - -00:33:09.920 --> 00:33:13.920 -configuration and then you will also have  -the direct uploads with drag and drop here   - -00:33:14.720 --> 00:33:19.520 -but let's create this post and  -then let's create the first comment - -00:33:22.320 --> 00:33:28.720 -and check that everything is working here in  -production and there you go there is now one   - -00:33:28.720 --> 00:33:35.200 -comment posted so let's do the test and see  -if we're set up and it works correctly with   - -00:33:36.080 --> 00:33:44.080 -the turbo back to get the comments from one  -side to the other this is the second comment - -00:33:47.440 --> 00:33:53.360 -and it sure does so now we have the entire  -application running in production backed by   - -00:33:54.000 --> 00:33:57.840 -a live setup that uses redis  -and all the other goodies   - -00:33:59.040 --> 00:34:04.720 -and that's all you need to get going get  -started building something real with ruby   - -00:34:04.720 --> 00:34:14.160 -on rails taking it all the way from hello world  -to who knows perhaps maybe one day IPO thank you - diff --git a/assets/videos/rails7-screencast-poster.jpg b/assets/videos/rails7-screencast-poster.jpg deleted file mode 100644 index 25bbd601054f640d05863c80973ed0810195ef63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104638 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 Fn*h#(?6?2`