{"id":452,"date":"2020-06-09T14:11:55","date_gmt":"2020-06-09T07:11:55","guid":{"rendered":"https:\/\/www.marketenterprise.vn\/blog\/?p=452"},"modified":"2021-12-20T18:40:12","modified_gmt":"2021-12-20T11:40:12","slug":"gioi-thieu-ve-sqlite3-va-huong-dan-cai-dat-sqlite3-tren-docker","status":"publish","type":"post","link":"https:\/\/www.marketenterprise.vn\/blog\/gioi-thieu-ve-sqlite3-va-huong-dan-cai-dat-sqlite3-tren-docker.html","title":{"rendered":"Gi\u1edbi thi\u1ec7u v\u1ec1 SQLite3 v\u00e0 H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t SQLite3 tr\u00ean Docker"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">L\u1eddi m\u1edf \u0111\u1ea7u<\/h2>\n\n\n\n<p>H\u00f4m nay m\u00ecnh mu\u1ed1n gi\u1edbi thi\u1ec7u v\u1ec1 <strong>SQLite<\/strong>. <strong>SQLite<\/strong> l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n ph\u1ea7n m\u1ec1m \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong vi\u1ec7c qu\u1ea3n l\u00fd c\u01a1 s\u1edf d\u1eef li\u1ec7u (Database) quan h\u1ec7 nh\u1ecf g\u1ecdn, kh\u00f4ng c\u1ea7n m\u00e1y ch\u1ee7, d\u1ec5 s\u1eed d\u1ee5ng, nhanh, ti\u1ec7n d\u1ee5ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng r\u1ed9ng r\u00e3i tr\u00ean th\u1ebf gi\u1edbi nh\u01b0:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09114255\/2.jpg\" alt=\"\" class=\"wp-image-454\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09114255\/2.jpg 1024w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09114255\/2-300x225.jpg 300w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09114255\/2-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><em>Adobe: D\u00f9ng SQLite cho ph\u1ea7n m\u1ec1m Adobe Lightroom.<\/em><\/li><li><em>Google: D\u00f9ng SQLite cho h\u1ec7 \u0111i\u1ec1u h\u00e0nh Android v\u00e0 tr\u00ecnh duy\u1ec7t Chrome.<\/em><\/li><li><em>Facebook: D\u00f9ng SQLite nh\u01b0 m\u1ed9t h\u1ec7 qu\u1ea3n tr\u1ecb C\u01a1 s\u1edf d\u1eef li\u1ec7u tr\u00ean <\/em><a href=\"http:\/\/osquery.io\/\" target=\"_blank\" rel=\"noopener\"><em>Osquery<\/em><\/a><em>.&nbsp;<\/em><\/li><li><em>Apple: D\u00f9ng SQLite cho r\u1ea5t nhi\u1ec1u \u1ee9ng d\u1ee5ng desktop ch\u1ea1y tr\u00ean n\u1ec1n t\u1ea3ng MAC OSX, Apple c\u0169ng s\u1eed d\u1ee5ng SQlite cho iTunes, Safari,&#8230;<\/em><\/li><li><em>Airbus: D\u00f9ng SQLite cho ph\u1ea7n m\u1ec1m qu\u1ea3n l\u00fd bay c\u1ee7a gia \u0111\u00ecnh d\u00f2ng m\u00e1y bay A350 XWB.<\/em><\/li><li><em>Bosch: D\u00f9ng SQLite cho c\u00e1c h\u1ec7 th\u1ed1ng \u0111a ph\u01b0\u01a1ng ti\u1ec7n \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean c\u00e1c d\u00f2ng xe c\u1ee7a c\u00e1c h\u00e3ng General Motors, Nissan v\u00e0 Suzuki.<\/em><\/li><\/ul>\n\n\n\n<p>Ngo\u00e0i ra c\u00f2n r\u1ea5t nhi\u1ec1u c\u00e1c C\u00f4ng ty l\u1edbn kh\u00e1c \u0111ang s\u1eed d\u1ee5ng SQLite c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o th\u00eam <a href=\"https:\/\/www.sqlite.org\/famous.html\" target=\"_blank\" rel=\"noopener\">t\u1ea1i \u0111\u00e2y<\/a>.<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">SQLite l\u00e0 g\u00ec?<\/h4>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"299\" height=\"161\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115029\/3.png\" alt=\"\" class=\"wp-image-455\"\/><\/figure><\/div>\n\n\n\n<p>SQLite l\u00e0 ph\u1ea7n m\u1ec1m qu\u1ea3n l\u00fd c\u01a1 s\u1edf d\u1eef li\u1ec7u (Database Management System) t\u01b0\u01a1ng t\u1ef1 nh\u01b0 Mysql, PostgreSQL\u2026 \u0110\u1eb7c \u0111i\u1ec3m c\u1ee7a SQLite l\u00e0 <a href=\"https:\/\/www.sqlite.org\/serverless.html\" target=\"_blank\" rel=\"noopener\">kh\u00f4ng c\u1ea7n m\u00e1y ch\u1ee7<\/a>, <a href=\"https:\/\/www.sqlite.org\/zeroconf.html\" target=\"_blank\" rel=\"noopener\">kh\u00f4ng c\u1ea7n c\u1ea5u h\u00ecnh<\/a>, <a href=\"https:\/\/www.sqlite.org\/fasterthanfs.html\" target=\"_blank\" rel=\"noopener\">nhanh<\/a>, <a href=\"https:\/\/www.sqlite.org\/footprint.html\" target=\"_blank\" rel=\"noopener\">nh\u1ecf g\u1ecdn<\/a>, <a href=\"http:\/\/sqlite.org\/selfcontained.html\" target=\"_blank\" rel=\"noopener\">kh\u00e9p k\u00edn<\/a>, <a href=\"https:\/\/www.sqlite.org\/hirely.html\" target=\"_blank\" rel=\"noopener\">c\u00f3 \u0111\u1ed9 tin c\u1eady cao<\/a> v\u00e0 h\u1ed7 tr\u1ee3 h\u1ea7u nh\u01b0 <a href=\"https:\/\/www.sqlite.org\/fullsql.html\" target=\"_blank\" rel=\"noopener\">\u0111\u1ea7y \u0111\u1ee7 c\u00e1c t\u00ednh n\u0103ng<\/a> c\u1ea7n thi\u1ebft trong chu\u1ea9n SQL92.&nbsp;<\/p>\n\n\n\n<p>D\u1eef li\u1ec7u Database c\u0169ng \u0111\u01b0\u1ee3c l\u01b0u tr\u00ean m\u1ed9t file duy nh\u1ea5t. Kh\u00f4ng c\u00f3 kh\u00e1i ni\u1ec7m user, password hay quy\u1ec1n h\u1ea1n trong SQLite Database. SQLite kh\u00f4ng th\u00edch h\u1ee3p v\u1edbi nh\u1eefng h\u1ec7 th\u1ed1ng l\u1edbn nh\u01b0ng \u1edf quy m\u00f4 v\u1eeba t\u1ea7m th\u00ec SQLite ph\u00e1t huy uy l\u1ef1c v\u00e0 kh\u00f4ng h\u1ec1 y\u1ebfu k\u00e9m v\u1ec1 m\u1eb7t ch\u1ee9c n\u0103ng hay t\u1ed1c \u0111\u1ed9.<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u0110\u1eb7t v\u1ea5n \u0111\u1ec1<\/h4>\n\n\n\n<p>Trong tr\u01b0\u1eddng h\u1ee3p b\u1ea1n c\u1ea7n x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng ghi ch\u00fa nh\u1ecf, kh\u00f4ng s\u1eed d\u1ee5ng m\u00f4 h\u00ecnh m\u00e1y ch\u1ee7\/kh\u00e1ch cho vi\u1ec7c th\u1eed nghi\u1ec7m ho\u1eb7c s\u1eed d\u1ee5ng, vi\u1ec7c l\u01b0u d\u1eef li\u1ec7u ch\u1ec9 s\u1eed d\u1ee5ng cho m\u1ed9t ng\u01b0\u1eddi d\u00f9ng. T\u1ed1c \u0111\u1ed9 ph\u00ecnh to c\u1ee7a d\u1eef li\u1ec7u th\u1ea5p v\u00e0 t\u1ed5 ch\u1ee9c d\u1eef li\u1ec7u c\u1ee7a gi\u1eefa c\u00e1c b\u1ea3ng trong C\u01a1 s\u1edf d\u1eef li\u1ec7u c\u1ee7a \u1ee9ng d\u1ee5ng kh\u00f4ng qu\u00e1 ph\u1ee9c t\u1ea1p.&nbsp;<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">H\u01b0\u1edbng gi\u1ea3i quy\u1ebft<\/h4>\n\n\n\n<p>Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y m\u00ecnh quy\u1ebft \u0111\u1ecbnh ch\u1ecdn SQLite v\u00ec \u01b0u \u0111i\u1ec3m d\u1ec5 c\u00e0i \u0111\u1eb7t, nhanh, nh\u1ecf g\u1ecdn, t\u1ea5t c\u1ea3 d\u1eef li\u1ec7u ch\u1ec9 l\u01b0u tr\u1eef trong 1 t\u1eadp tin duy nh\u1ea5t \u0111\u1ec3 x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng Todo List nh\u1ecf nh\u01b0 \u1ea3nh b\u00ean d\u01b0\u1edbi.<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"424\" height=\"369\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115141\/4.png\" alt=\"\" class=\"wp-image-456\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115141\/4.png 424w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115141\/4-300x261.png 300w\" sizes=\"auto, (max-width: 424px) 100vw, 424px\" \/><figcaption><br><br><\/figcaption><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t SQLite3, Ruby On Rails v\u1edbi <a href=\"https:\/\/www.marketenterprise.vn\/blog\/docker-la-gi.html\" target=\"_blank\" data-type=\"URL\" data-id=\"https:\/\/www.marketenterprise.vn\/blog\/docker-la-gi.html\" rel=\"noreferrer noopener\">Docker<\/a><\/h4>\n\n\n\n<p>Trong v\u00ed d\u1ee5 n\u00e0y <strong>MEVN<\/strong> s\u1ebd x\u00e2y d\u1ef1ng m\u1ed9t \u1ee9ng d\u1ee5ng Todo List nh\u1ecf s\u1eed d\u1ee5ng <strong>Docker, Ruby On Rails 6<\/strong> v\u00e0 <strong>SQLite3<\/strong>. C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c c\u00f4ng ngh\u1ec7 kh\u00e1c t\u00f9y theo m\u1ee5c ti\u00eau c\u1ee7a m\u1ed7i d\u1ef1 \u00e1n.<\/p>\n\n\n\n<p>Sau \u0111\u00e2y, m\u00ecnh s\u1ebd h\u01b0\u1edbng d\u1eabn c\u00e1c b\u1ea1n c\u00e1ch c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng <strong>SQLite3<\/strong> v\u1edbi <strong>Ruby On Rails<\/strong> tr\u00ean <strong>Docker<\/strong>. \u0110\u1ec3 tr\u00e1nh g\u00e2y lo\u00e3ng b\u00e0i vi\u1ebft v\u1ec1 <strong>SQLite3<\/strong> m\u00ecnh c\u00f3 th\u00eam ph\u1ea7n <em>t\u00e0i li\u1ec7u tham kh\u1ea3o<\/em> \u1edf cu\u1ed1i b\u00e0i vi\u1ebft c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o th\u00eam.&nbsp;<\/p>\n\n\n\n<p>Sau khi c\u00e0i \u0111\u1eb7t <strong>Docker<\/strong> c\u00e1c b\u1ea1n v\u00e0o d\u1ef1 \u00e1n t\u1ea1o 2 file m\u1edbi \u0111\u1eb7t t\u00ean l\u00e0 <strong><em>Dockerfile<\/em><\/strong> (L\u01b0u \u00fd t\u1eadp tin kh\u00f4ng c\u00f3 ph\u1ea7n m\u1edf r\u1ed9ng) v\u00e0 file <strong>docker-compose.yml <\/strong>. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u1ea5p th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i c\u1ee7a d\u1ef1 \u00e1n.<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"302\" height=\"137\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115308\/5.png\" alt=\"\" class=\"wp-image-457\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115308\/5.png 302w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115308\/5-300x136.png 300w\" sizes=\"auto, (max-width: 302px) 100vw, 302px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>C\u00e1c b\u1ea1n m\u1edf file <strong>Dockerfile<\/strong> v\u00e0 th\u00eam c\u00e1c d\u00f2ng nh\u01b0 b\u00ean d\u01b0\u1edbi:<\/p>\n\n\n\n<p><h3>Dockerfile<\/h3><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"505\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115347\/6.png\" alt=\"\" class=\"wp-image-458\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115347\/6.png 512w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115347\/6-300x296.png 300w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115347\/6-90x90.png 90w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>D\u00f2ng RUN apt-get install -y sqlite3 d\u00f9ng \u0111\u1ec3 c\u00e0i \u0111\u1eb7t SQLite3 ch\u1ea1y tr\u00ean m\u00f4i tr\u01b0\u1eddng ruby.<\/p>\n\n\n\n<p>Sau khi th\u00eam d\u00f2ng c\u00e0i \u0111\u1eb7t <strong>Sqlite3<\/strong> v\u00e0o <strong>Dockerfile<\/strong> ti\u1ebfp theo ch\u00fang ta s\u1ebd thi\u1ebft l\u1eadp container cho ruby tr\u00ean file <strong>docker-compose.yml <\/strong>( C\u00e1c b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o th\u00eam c\u00e1ch x\u00e2y d\u1ef1ng file docker-compose trong link tham kh\u1ea3o b\u00ean d\u01b0\u1edbi ).<br><br><\/p>\n\n\n\n<p><h3>T\u1ea1o project Todos<\/h3>\n<p>Sau khi t\u1ea1o v\u00e0 l\u01b0u file <strong>docker-compose.yml<\/strong>, vi\u1ec7c ti\u1ebfp theo ch\u00fang ta c\u1ea7n l\u00e0m t\u1ea1o di chuy\u1ec3n \u0111\u1ebfn th\u01b0 m\u1ee5c <strong>rubyapp\/source<\/strong> v\u00e0 t\u1ea1o m\u1ed9t project m\u1edbi s\u1eed d\u1ee5ng l\u1ec7nh <strong>rails &lt;t\u00ean project&gt;<\/strong>. (Ch\u00fa \u00fd tu\u1ef3 theo h\u1ec7 \u0111i\u1ec1u h\u00e0nh m\u00e0 b\u1ea1n \u0111ang s\u1eed d\u1ee5ng c\u00e1c b\u1ea1n s\u1ebd c\u1ea7n c\u00e0i \u0111\u1eb7t <strong>Ruby, RubyGems<\/strong> v\u00e0 <strong>Rails<\/strong> v\u00e0o m\u00e1y tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n b\u01b0\u1edbc ti\u1ebfp theo n\u00e0y, c\u00e1c b\u1ea1n tham kh\u1ea3o t\u00e0i li\u1ec7u h\u01b0\u1edbng d\u1eabn b\u00ean d\u01b0\u1edbi).<br><br><\/p><\/p>\n\n\n\n<p>M\u00ecnh \u0111\u1eb7t t\u00ean d\u1ef1 \u00e1n l\u00e0 <strong>Todos.<\/strong> Ch\u00fang ta ch\u1ea1y l\u1ec7nh<strong> rails new Todos <\/strong>m\u1eb7c \u0111\u1ecbnh Ruby On Rails s\u1ebd t\u1ea1o project c\u00f3 thi\u1ebft l\u1eadp s\u1eb5n cho <strong>SQLite<\/strong><\/p>\n\n\n\n<p>Sau khi ch\u1ea1y xong l\u1ec7nh ch\u00fang ta s\u1ebd c\u00f3 m\u1ed9t th\u01b0 m\u1ee5c project <strong>Todo<\/strong>&nbsp;<\/p>\n\n\n\n<p>&nbsp;<br><br>C\u00e1c b\u1ea1n ti\u1ebfp t\u1ee5c g\u00f5 l\u1ec7nh \u0111\u1ec3 docker build image v\u00e0 ch\u1ea1y docker-compose up \u0111\u1ec3 t\u1ea3i c\u00e1c image b\u1ed5 sung cho vi\u1ec7c t\u1ea1o container<\/p>\n\n\n\n<p><strong><em>\u201cdocker-compose build<\/em><\/strong><\/p>\n\n\n\n<p><strong><em>docker-compose up\u201d<\/em><\/strong><\/p>\n\n\n\n<p>Sau khi ch\u1ea1y xong c\u00e1c b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c th\u00f4ng b\u00e1o ho\u00e0n t\u1ea5t vi\u1ec7c ch\u1ea1y container cho ruby.Ti\u1ebfp theo ch\u00fang ta truy c\u1eadp v\u00e0o \u0111\u01b0\u1eddng d\u1eabn <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noopener\">localhost:3000<\/a> v\u00e0 n\u1ebfu nh\u01b0 b\u1ea1n setup th\u00e0nh c\u00f4ng b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c th\u00f4ng b\u00e1o nh\u01b0 \u1ea3nh b\u00ean d\u01b0\u1edbi.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"436\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115441\/7.png\" alt=\"\" class=\"wp-image-459\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115441\/7.png 512w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09115441\/7-300x255.png 300w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n\n<p>Yayyyyyyyy!!!!!!! Ch\u00fang ta \u0111\u00e3 c\u00e0i \u0111\u1eb7t v\u00e0 t\u00edch h\u1ee3p th\u00e0nh c\u00f4ng <strong>SQLite3<\/strong> tr\u00ean <strong>Ruby On Rails<\/strong><\/p>\n\n\n\n<p>B\u00e2y gi\u1edd ch\u00fang ta s\u1ebd b\u1eaft \u0111\u1ea7u x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng Todos nh\u1ecf \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi Database c\u1ee7a SQLite<\/p>\n\n\n\n<p>C\u00e1c b\u1ea1n ch\u1ea1y l\u1ec7nh exec \u0111\u1ec3 truy c\u1eadp v\u00e0o container c\u1ee7a ruby v\u00e0 th\u1ef1c thi l\u1ec7nh kh\u1edfi t\u1ea1o controller todo v\u1edbi action \u2018index\u2019 :&nbsp;<\/p>\n\n\n\n<p><strong><em>\u201cdocker exec -it rails_ruby rails generate controller todos index\u201d<\/em><\/strong><\/p>\n\n\n\n<p>Sau khi ch\u1ea1y xong l\u1ec7nh tr\u00ean c\u00e1c b\u1ea1n s\u1ebd c\u00f3 1 file <strong>controller\/todos_controller<\/strong> v\u00e0 1 file <strong>views\/todos\/index.html.erb<\/strong> trong th\u01b0 m\u1ee5c <strong>app<\/strong> c\u1ee7a d\u1ef1 \u00e1n, rails c\u0169ng t\u1ea1o s\u1eb5n cho b\u1ea1n 1 route trong file <strong>config\/routes.rb<\/strong> <br><br><\/p>\n\n\n\n<p>C\u00e1c b\u1ea1n ti\u1ebfp t\u1ee5c m\u1edf file <strong>routes.rb <\/strong>v\u00e0 th\u00eam d\u00f2ng <strong>route resource<\/strong> nh\u01b0 b\u00ean d\u01b0\u1edbi<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"339\" height=\"81\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09131847\/Screen-Shot-2020-06-08-at-15.23.14.png\" alt=\"\" class=\"wp-image-460\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09131847\/Screen-Shot-2020-06-08-at-15.23.14.png 339w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09131847\/Screen-Shot-2020-06-08-at-15.23.14-300x72.png 300w\" sizes=\"auto, (max-width: 339px) 100vw, 339px\" \/><\/figure><\/div>\n\n\n\n<p>Sau khi th\u00eam route c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp v\u00e0o \u0111\u01b0\u1eddng d\u1eabn <a href=\"http:\/\/localhost:3000\/\" target=\"_blank\" rel=\"noopener\">localhost:3000<\/a> \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n s\u1ebd hi\u1ec3n th\u1ecb nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"352\" height=\"153\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132020\/Screen-Shot-2020-06-04-at-14.09.39.png\" alt=\"\" class=\"wp-image-461\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132020\/Screen-Shot-2020-06-04-at-14.09.39.png 352w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132020\/Screen-Shot-2020-06-04-at-14.09.39-300x130.png 300w\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" \/><\/figure><\/div>\n\n\n\n<p>M\u1eb7c \u0111\u1ecbnh <strong>Ruby On Rails<\/strong> s\u1ebd h\u1ed7 tr\u1ee3 <strong>SQLite 3<\/strong> nh\u01b0ng \u0111\u1ec3 config database cho <strong>SQLite3<\/strong> ho\u1eb7c c\u00e1c database kh\u00e1c b\u1ea1n c\u00f3 th\u1ec3 v\u00e0o <strong>config\/database.yml<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"570\" height=\"368\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132047\/Screen-Shot-2020-06-08-at-15.15.29.png\" alt=\"\" class=\"wp-image-462\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132047\/Screen-Shot-2020-06-08-at-15.15.29.png 570w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132047\/Screen-Shot-2020-06-08-at-15.15.29-300x194.png 300w\" sizes=\"auto, (max-width: 570px) 100vw, 570px\" \/><\/figure><\/div>\n\n\n\n<p>B\u00e2y gi\u1edd ch\u00fang ta s\u1ebd b\u1eaft \u0111\u1ea7u t\u1ea1o model trong Rails \u0111\u1ec3 t\u1ea1o table Todo trong SQLite<\/p>\n\n\n\n<p><br><br>C\u00e1c b\u1ea1n ch\u1ea1y l\u1ec7nh sau \u0111\u1ec3 t\u1ea1o model cho project<\/p>\n\n\n\n<p><strong><em>\u201cdocker exec -it rails_ruby rails generate model todo\u201d<\/em><\/strong>Rails s\u1ebd sinh ra file <strong>model\/todo.rb <\/strong>&nbsp;v\u00e0 file <strong>db\/migrate\/20200604071501_create_todos.rb <\/strong>&nbsp;nh\u01b0 \u1ea3nh b\u00ean d\u01b0\u1edbi<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"425\" height=\"102\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132133\/Screen-Shot-2020-06-04-at-14.16.05.png\" alt=\"\" class=\"wp-image-463\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132133\/Screen-Shot-2020-06-04-at-14.16.05.png 425w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132133\/Screen-Shot-2020-06-04-at-14.16.05-300x72.png 300w\" sizes=\"auto, (max-width: 425px) 100vw, 425px\" \/><\/figure><\/div>\n\n\n\n<p>Ch\u00fang ta ti\u1ebfp t\u1ee5c m\u1edf file <strong>db\/migrate\/20200604071501_create_todos.rb <\/strong>v\u00e0 th\u00eam c\u00e1c d\u00f2ng nh\u01b0 b\u00ean d\u01b0\u1edbi \u0111\u1ec3 t\u1ea1o v\u00e0 \u0111\u1ecbnh d\u1ea1ng ki\u1ec3u d\u1eef li\u1ec7u cho c\u00e1c c\u1ed9t trong table c\u1ee7a <strong>SQLite3<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"539\" height=\"211\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132256\/Screen-Shot-2020-06-08-at-15.15.58.png\" alt=\"\" class=\"wp-image-464\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132256\/Screen-Shot-2020-06-08-at-15.15.58.png 539w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132256\/Screen-Shot-2020-06-08-at-15.15.58-300x117.png 300w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>B\u1ea1n ti\u1ebfp t\u1ee5c ch\u1ea1y l\u1ec7nh command b\u00ean d\u01b0\u1edbi \u0111\u1ec3 migrate v\u00e0 kh\u1edfi t\u1ea1o database<\/p>\n\n\n\n<p><strong><em>\u201cdocker exec -it rails_ruby rails db:migrate\u201d<\/em><\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"67\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132355\/Screen-Shot-2020-06-04-at-14.38.00.png\" alt=\"\" class=\"wp-image-465\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132355\/Screen-Shot-2020-06-04-at-14.38.00.png 588w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132355\/Screen-Shot-2020-06-04-at-14.38.00-300x34.png 300w\" sizes=\"auto, (max-width: 588px) 100vw, 588px\" \/><\/figure><\/div>\n\n\n\n<p>Sau khi th\u1ef1c thi xong l\u1ec7nh migrate, Rails s\u1ebd sinh cho b\u1ea1n m\u1ed9t file <strong>db\/development.sqlite3 <\/strong>t\u1ea5t c\u1ea3 d\u1eef li\u1ec7u c\u1ee7a c\u00e1c b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c SQLite l\u01b0u trong m\u1ed9t file duy nh\u1ea5t.D\u00f9ng \u1ee9ng d\u1ee5ng <strong><em>DB Browser for SQLite<\/em><\/strong> \u0111\u1ec3 m\u1edf file <strong>development.sqlite3<\/strong> b\u1ea1n s\u1ebd th\u1ea5y c\u1ea5u tr\u00fac c\u1ee7a table todos c\u1ee7a ch\u00fang ta sau khi kh\u1edfi t\u1ea1o nh\u01b0 sau:<br><br><\/p>\n\n\n\n<p>Ch\u00fang ta c\u0169ng th\u1eed \u0111\u1ed5 10 d\u00f2ng d\u1eef li\u1ec7u b\u1eb1ng l\u1ec7nh rails db:seed \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 b\u1edfi Rail \u0111\u1ec3 \u0111\u1ed5 m\u1ed9t s\u1ed1 d\u1eef li\u1ec7u v\u00e0 database, \u0111\u1ec3 l\u00e0m vi\u1ec7c n\u00e0y c\u00e1c b\u1ea1n v\u00e0o file <strong>db\/seeds.rb<\/strong> v\u00e0 th\u00eam d\u00f2ng b\u00ean d\u01b0\u1edbi<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"77\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132450\/Screen-Shot-2020-06-08-at-15.16.35.png\" alt=\"\" class=\"wp-image-466\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132450\/Screen-Shot-2020-06-08-at-15.16.35.png 507w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132450\/Screen-Shot-2020-06-08-at-15.16.35-300x46.png 300w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure><\/div>\n\n\n\n<p>Ch\u00fang ta ti\u1ebfp t\u1ee5c ch\u1ea1y l\u1ec7nh \u0111\u1ec3 \u0111\u1ed5 d\u1eef li\u1ec7u th\u1eed nghi\u1ec7m v\u00e0o database:<\/p>\n\n\n\n<p>docker exec -it rails_ruby rails db:seed<\/p>\n\n\n\n<p>Ki\u1ec3m tra d\u1eef li\u1ec7u sau khi \u0111\u1ed5 b\u1eb1ng <strong>DB Browser for SQLite<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"499\" height=\"350\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132527\/Screen-Shot-2020-06-04-at-15.54.29.png\" alt=\"\" class=\"wp-image-467\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132527\/Screen-Shot-2020-06-04-at-15.54.29.png 499w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09132527\/Screen-Shot-2020-06-04-at-15.54.29-300x210.png 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/figure><\/div>\n\n\n\n<ol class=\"wp-block-list\"><li>Sau khi x\u00e2y d\u1ef1ng giao di\u1ec7n \u1ee9ng d\u1ee5ng b\u1eb1ng html, css ch\u00fang ta v\u00e0o file <strong>views\/todos\/index.html.erb<\/strong> v\u00e0 th\u00eam c\u00e1c d\u00f2ng code \u0111\u1ec3 hi\u1ec3n th\u1ecb v\u00e0 x\u1eed l\u00fd d\u1eef li\u1ec7u t\u1eeb database ra m\u00e0n h\u00ecnh.<\/li><\/ol>\n\n\n\n<p>Ch\u00fang ta v\u00e0o <strong>controllers\/todos_controller.rb<\/strong> v\u00e0 th\u00eam h\u00e0m index l\u1ea5y d\u1eef li\u1ec7u t\u1eeb database th\u00f4ng qua model.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"586\" height=\"362\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134228\/Screen-Shot-2020-06-08-at-15.17.50.png\" alt=\"\" class=\"wp-image-468\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134228\/Screen-Shot-2020-06-08-at-15.17.50.png 586w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134228\/Screen-Shot-2020-06-08-at-15.17.50-300x185.png 300w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/figure>\n\n\n\n<p><br><br>Hi\u1ec7n t\u1ea1i Todo List s\u1ebd hi\u1ec3n th\u1ecb d\u1eef li\u1ec7u nh\u01b0 b\u00ean d\u01b0\u1edbi, do ch\u00fang ta \u0111\u00e3 ch\u1ea1y l\u1ec7nh rails db:seed \u0111\u1ec3 th\u00eam d\u1eef li\u1ec7u v\u00e0o database tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"481\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134323\/Screen-Shot-2020-06-04-at-15.56.30.png\" alt=\"\" class=\"wp-image-469\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134323\/Screen-Shot-2020-06-04-at-15.56.30.png 775w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134323\/Screen-Shot-2020-06-04-at-15.56.30-300x186.png 300w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134323\/Screen-Shot-2020-06-04-at-15.56.30-768x477.png 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>Ch\u00fang ta ti\u1ebfp t\u1ee5c m\u1edf file <strong>controllers\/todo_controller.rb <\/strong>v\u00e0 th\u00eam code insert d\u1eef li\u1ec7u v\u00e0o database. Ch\u00fang ta truy\u1ec1n d\u1eef li\u1ec7u b\u1eb1ng params v\u1edbi bi\u1ebfn description ki\u1ec3u d\u1eef li\u1ec7u l\u00e0 string.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"700\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134402\/Screen-Shot-2020-06-08-at-15.18.36.png\" alt=\"\" class=\"wp-image-470\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134402\/Screen-Shot-2020-06-08-at-15.18.36.png 557w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134402\/Screen-Shot-2020-06-08-at-15.18.36-239x300.png 239w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/figure>\n\n\n\n<p><br><br>Th\u1eed th\u00eam m\u1edbi m\u1ed9t task c\u00f3 t\u00ean l\u00e0 <em>\u201cTh\u1eed nghi\u1ec7m\u201d<\/em> v\u00e0o database c\u1ee7a SQLite ta s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c k\u1ebft qu\u1ea3 sau:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"846\" height=\"343\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134446\/Screen-Shot-2020-06-04-at-15.59.54.png\" alt=\"\" class=\"wp-image-471\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134446\/Screen-Shot-2020-06-04-at-15.59.54.png 846w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134446\/Screen-Shot-2020-06-04-at-15.59.54-300x122.png 300w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134446\/Screen-Shot-2020-06-04-at-15.59.54-768x311.png 768w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/figure>\n\n\n\n<p><br><br>Ki\u1ec3m tra l\u1ea1i d\u1eef li\u1ec7u trong file <strong>db\/development.sqlite3<\/strong> b\u1eb1ng c\u00f4ng c\u1ee5 DB Browser For SQLite c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u00e3 c\u00f3 th\u00eam m\u1ed9t d\u00f2ng m\u1edbi v\u1edbi t\u00ean l\u00e0 \u201cTh\u1eed nghi\u1ec7m\u201d.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"230\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134533\/Screen-Shot-2020-06-04-at-16.15.43.png\" alt=\"\" class=\"wp-image-472\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134533\/Screen-Shot-2020-06-04-at-16.15.43.png 396w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134533\/Screen-Shot-2020-06-04-at-16.15.43-300x174.png 300w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>2.\u0110\u1ec3 x\u00f3a m\u1ed9t d\u00f2ng trong c\u01a1 s\u1edf d\u1eef li\u1ec7u ch\u00fang ta ti\u1ebfp t\u1ee5c m\u1edf file <strong>controller\/todos_controller.rb<\/strong> v\u00e0 th\u00eam h\u00e0m <strong>destroy <\/strong>d\u1ef1a tr\u00ean id c\u1ee7a d\u00f2ng \u0111\u01b0\u1ee3c ch\u1ecdn.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"586\" height=\"362\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134732\/Screen-Shot-2020-06-08-at-15.17.50-2.png\" alt=\"\" class=\"wp-image-474\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134732\/Screen-Shot-2020-06-08-at-15.17.50-2.png 586w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134732\/Screen-Shot-2020-06-08-at-15.17.50-2-300x185.png 300w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/figure><\/div>\n\n\n\n<p>Ch\u00fang ta th\u1eed xo\u00e1 task \u201cTh\u1eed nghi\u1ec7m\u201d v\u1eeba th\u00eam v\u00e0o v\u00e0 \u0111\u00e2y l\u00e0 k\u1ebft qu\u1ea3<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"835\" height=\"306\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134840\/Screen-Shot-2020-06-04-at-16.03.16.png\" alt=\"\" class=\"wp-image-475\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134840\/Screen-Shot-2020-06-04-at-16.03.16.png 835w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134840\/Screen-Shot-2020-06-04-at-16.03.16-300x110.png 300w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134840\/Screen-Shot-2020-06-04-at-16.03.16-768x281.png 768w\" sizes=\"auto, (max-width: 835px) 100vw, 835px\" \/><\/figure>\n\n\n\n<p><br><br>Sau khi xo\u00e1 task th\u1eed nghi\u1ec7m ch\u00fang ta d\u00f9ng DB Browser for SQLite \u0111\u1ec3 ki\u1ec3m tra l\u1ea1i d\u1eef li\u1ec7u \u0111ang c\u00f3 b\u00ean trong file <strong>development.sqlite3<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"186\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134916\/Screen-Shot-2020-06-04-at-16.09.34.png\" alt=\"\" class=\"wp-image-476\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134916\/Screen-Shot-2020-06-04-at-16.09.34.png 523w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09134916\/Screen-Shot-2020-06-04-at-16.09.34-300x107.png 300w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/figure><\/div>\n\n\n\n<p>Task \u201cTh\u1eed nghi\u1ec7m\u201d \u0111\u00e3 \u0111\u01b0\u1ee3c x\u00f3a kh\u1ecfi c\u01a1 s\u1edf d\u1eef li\u1ec7u.<\/p>\n\n\n\n<p><br><br>3.Sau \u0111\u00f3 ch\u00fang ta th\u00eam h\u00e0m update l\u1ea1i d\u1eef li\u1ec7u \u0111\u00e3 ch\u1ecdn \u0111\u1ec3 update l\u1ea1i tr\u1ea1ng th\u00e1i c\u1ee7a task sau khi \u0111\u00e3 update ho\u00e0n t\u1ea5t v\u00e0o c\u01a1 s\u1edf d\u1eef li\u1ec7u.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"617\" height=\"385\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135005\/Screen-Shot-2020-06-08-at-15.20.55.png\" alt=\"\" class=\"wp-image-477\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135005\/Screen-Shot-2020-06-08-at-15.20.55.png 617w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135005\/Screen-Shot-2020-06-08-at-15.20.55-300x187.png 300w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<p><br><br>Hi\u1ec7n t\u1ea1i checkbox c\u1ee7a ch\u00fang ta \u0111ang \u0111\u01b0\u1ee3c check c\u1ea3 3 d\u00f2ng<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"241\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135049\/Screen-Shot-2020-06-04-at-16.08.22.png\" alt=\"\" class=\"wp-image-478\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135049\/Screen-Shot-2020-06-04-at-16.08.22.png 515w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135049\/Screen-Shot-2020-06-04-at-16.08.22-300x140.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/figure><\/div>\n\n\n\n<p><br><br>Ch\u00fang ta th\u1eed thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i c\u1ee7a checkbox task \u201cTest\u201d \u0111\u1ea7u ti\u00ean th\u1eed xem nh\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"310\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135126\/Screen-Shot-2020-06-04-at-16.04.20.png\" alt=\"\" class=\"wp-image-479\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135126\/Screen-Shot-2020-06-04-at-16.04.20.png 648w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135126\/Screen-Shot-2020-06-04-at-16.04.20-300x144.png 300w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/figure>\n\n\n\n<p><br><br>Ki\u1ec3m tra l\u1ea1i d\u1eef li\u1ec7u c\u1ee7a c\u1ed9t status trong file <strong>development.sqlite3 <\/strong>t\u1ea1i d\u00f2ng \u0111\u1ea7u ti\u00ean, tr\u1ea1ng th\u00e1i \u0111\u00e3 \u0111\u01b0\u1ee3c thay \u0111\u1ed5i v\u1ec1 <strong>\u201cuncheck\u201d<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"518\" height=\"186\" src=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135213\/Screen-Shot-2020-06-04-at-16.05.33.png\" alt=\"\" class=\"wp-image-480\" srcset=\"https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135213\/Screen-Shot-2020-06-04-at-16.05.33.png 518w, https:\/\/mevn-public.s3-ap-southeast-1.amazonaws.com\/marketenterprise.vn\/wp-images\/2020\/06\/09135213\/Screen-Shot-2020-06-04-at-16.05.33-300x108.png 300w\" sizes=\"auto, (max-width: 518px) 100vw, 518px\" \/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><br><br><strong>\u01afu \u0111i\u1ec3m c\u1ee7a SQLite<\/strong><\/h4>\n\n\n\n<p>&#8211; V\u00ec SQLite kh\u00f4ng c\u1ea7n client\u2013server database engine n\u00ean c\u00f3 th\u1ec3 hi\u1ec3u file CSDL \u0111\u00e3 t\u00edch h\u1ee3p m\u1ecdi th\u1ee9, s\u1eed d\u1ee5ng ngay kh\u00f4ng c\u1ea7n ph\u1ea3i c\u00e0i \u0111\u1eb7t th\u00eam th\u1ee9 g\u00ec.<\/p>\n\n\n\n<p>&#8211; SQLite kh\u00f4ng c\u1ea7n c\u1ea5u h\u00ecnh, ngh\u0129a l\u00e0 kh\u00f4ng c\u1ea7n thi\u1ebft ph\u1ea3i c\u00e0i \u0111\u1eb7t.<\/p>\n\n\n\n<p>&#8211;&nbsp; V\u1edbi SQLite, Database \u0111\u1ea7y \u0111\u1ee7 \u0111\u01b0\u1ee3c l\u01b0u gi\u1eef trong m\u1ed9t t\u1eadp tin duy nh\u1ea5t.<\/p>\n\n\n\n<p>&#8211; SQLite l\u00e0 r\u1ea5t nh\u1ecf g\u1ecdn, nh\u1ecf h\u01a1n 600kB \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u1ea7y \u0111\u1ee7 ho\u1eb7c nh\u1ecf h\u01a1n 250kB khi \u0111\u00e3 b\u1ecf qua c\u00e1c t\u00ednh n\u0103ng t\u00f9y \u00fd.<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>H\u1ea1n ch\u1ebf c\u1ee7a SQLite<\/strong><\/h4>\n\n\n\n<p>&#8211; &nbsp;Do s\u1eed d\u1ee5ng c\u01a1 ch\u1ebf <strong>coarse-gained locking <\/strong>n\u00ean trong c\u00f9ng m\u1ed9t th\u1eddi \u0111i\u1ec3m SQLite c\u00f3 th\u1ec3 h\u1ed7 tr\u1ee3 nhi\u1ec1u ng\u01b0\u1eddi \u0111\u1ecdc d\u1eef li\u1ec7u, nh\u01b0ng ch\u1ec9 c\u00f3 1 ng\u01b0\u1eddi c\u00f3 th\u1ec3 ghi d\u1eef li\u1ec7u.<\/p>\n\n\n\n<p>&#8211; SQLite kh\u00f4ng ph\u1ea3i l\u00e0 l\u1ef1a ch\u1ecdn ho\u00e0n h\u1ea3o \u0111\u1ec3 \u0111\u00e1p \u1ee9ng c\u00e1c nhu c\u1ea7u x\u1eed l\u00fd tr\u00ean m\u1ed9t kh\u1ed1i l\u01b0\u1ee3ng d\u1eef li\u1ec7u l\u1edbn, ph\u00e1t sinh li\u00ean t\u1ee5c.<\/p>\n\n\n\n<p>&#8211;&nbsp; SQLite c\u0169ng thi\u1ebfu c\u00e1c t\u00ednh n\u0103ng \u0111o l\u01b0\u1eddng hi\u1ec7u su\u1ea5t<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">T\u1ed5ng k\u1ebft<\/h4>\n\n\n\n<p>V\u1eady l\u00e0 m\u00ecnh \u0111\u00e3 chia s\u1ebb xong v\u1edbi m\u1ecdi ng\u01b0\u1eddi v\u1ec1 <strong>SQLite<\/strong>. Ch\u00fang ta \u0111ang s\u1ed1ng trong m\u1ed9t th\u1eddi \u0111\u1ea1i c\u00f4ng ngh\u1ec7 ph\u00e1t tri\u1ec3n nhanh, nh\u1eefng c\u00f4ng ngh\u1ec7 \u0111ang ph\u1ed5 bi\u1ebfn ho\u1eb7c \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng t\u1ea1i <strong>MarketEnterprise Vietnam<\/strong> \u0111\u1ec1u l\u00e0 nh\u1eefng c\u00f4ng ngh\u1ec7 m\u1edbi g\u00f3p ph\u1ea7n n\u00e2ng cao ch\u1ea5t l\u01b0\u1ee3ng cu\u1ed9c s\u1ed1ng cho m\u1ecdi ng\u01b0\u1eddi.&nbsp;<\/p>\n\n\n\n<p>Th\u00f4ng qua nh\u1eefng ki\u1ebfn th\u1ee9c trong b\u00e0i vi\u1ebft v\u1ec1 <strong>SQLite<\/strong>, hy v\u1ecdng c\u00e1c b\u1ea1n c\u00f3 th\u1ec3 hi\u1ec3u th\u00eam v\u1ec1 <strong>SQLite<\/strong>, v\u1ec1 nh\u1eefng th\u1ebf m\u1ea1nh, \u01b0u \u0111i\u1ec3m, nh\u01b0\u1ee3c \u0111i\u1ec3m v\u00e0 nh\u1eefng c\u00f4ng d\u1ee5ng c\u1ee7a <strong>SQLite<\/strong> trong cu\u1ed9c s\u1ed1ng h\u00e0ng ng\u00e0y v\u00e0 trong c\u00f4ng vi\u1ec7c c\u1ee7a c\u00e1c b\u1ea1n.<br><br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Tham kh\u1ea3o th\u00eam<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Docker: <a href=\"https:\/\/docs.docker.com\/\" target=\"_blank\" rel=\"noopener\">docs.docker.com<\/a><\/li><li>Ruby On Rails: <a href=\"http:\/\/guides.rubyonrails.org\/\" target=\"_blank\" rel=\"noopener\">guides.rubyonrails.org<\/a><\/li><li>Ruby: <a href=\"https:\/\/www.tutorialspoint.com\/ruby\/index.htm\" target=\"_blank\" rel=\"noopener\">www.tutorialspoint.com\/ruby\/index.htm<\/a><\/li><li>SQLite3: <a href=\"https:\/\/www.tutorialspoint.com\/sqlite\/index.htm\" target=\"_blank\" rel=\"noopener\">www.tutorialspoint.com\/sqlite\/index.htm<\/a><\/li><\/ul>\n\n\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ch\u00e0o c\u00e1c b\u1ea1n, m\u00ecnh r\u1ea5t vui khi \u0111\u01b0\u1ee3c chia s\u1ebb v\u1edbi c\u00e1c b\u1ea1n ki\u1ebfn th\u1ee9c v\u1ec1 c\u00e1c c\u00f4ng ngh\u1ec7 \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng t\u1ea1i MarketEnterprise Vietnam. <\/p>\n","protected":false},"author":21,"featured_media":453,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[27,22],"class_list":["post-452","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-sqlite3","tag-technical"],"_links":{"self":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts\/452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/comments?post=452"}],"version-history":[{"count":0,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/posts\/452\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/media\/453"}],"wp:attachment":[{"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/media?parent=452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/categories?post=452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marketenterprise.vn\/blog\/wp-json\/wp\/v2\/tags?post=452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}