{"id":308783,"date":"2020-08-20T15:00:56","date_gmt":"2020-08-20T15:00:56","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=308783"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=308783","title":{"rendered":"Ruby Digest"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/515854\/\">\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e Ruby, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0441 1 \u043f\u043e 15 \u0430\u0432\u0433\u0443\u0441\u0442\u0430:<br \/>  \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u043c\u0435\u0434\u0438\u0430, \u043d\u043e\u0432\u0438\u043d\u043a\u0438, \u0440\u0435\u043b\u0438\u0437\u044b, \u0441\u0442\u0430\u0442\u044c\u0438, \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ig\/tf\/jq\/igtfjqfsr4v4yl9nohlqiyqoimo.png\"><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041d\u043e\u0432\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u0412 Ruby 3 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e <a href=\"https:\/\/github.com\/ko1\/ruby\/blob\/ractor_parallel\/doc\/ractor.md\" rel=\"nofollow\">\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Ractor<\/a> \u2014 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u043a\u0442\u043e\u0440\u043e\u0432. Ractor \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ruby-\u043a\u043e\u0434\u0430 <br \/>  \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u043e\u0442\u043e\u043a\u043e-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  <a href=\"https:\/\/2020.rubyworld-conf.org\/en\/news\/2020\/08\/speaker-invite\/\" rel=\"nofollow\">\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0438\u043a\u0435\u0440\u044b<\/a> \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044e <a href=\"https:\/\/2020.rubyworld-conf.org\/en\/\" rel=\"nofollow\">RubyWorld 2020<\/a> \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 online.<\/p>\n<p>  21 \u0430\u0432\u0433\u0443\u0441\u0442\u0430, \u0432 \u044d\u0442\u0443 \u043f\u044f\u0442\u043d\u0438\u0446\u0443, \u043f\u0440\u043e\u0439\u0434\u0451\u0442 <a href=\"https:\/\/noruko.org\/\" rel=\"nofollow\">\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f NoRuKo<\/a> \u2014 \u0440\u0435\u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 online \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 <a href=\"https:\/\/euruko2021.org\/\" rel=\"nofollow\">EuRuKo<\/a>, \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0435\u0439 \u0435\u0432\u0440\u043e\u043f\u0435\u0439\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 \u043f\u043e Ruby.<\/p>\n<p>  <a href=\"https:\/\/twitter.com\/eileencodes\/status\/1288871787288305664\" rel=\"nofollow\">GitHub \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0441\u044f<\/a> \u0434\u043e Ruby 2.7 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435.<\/p>\n<p>  \u0412 \u043d\u0435\u0434\u0430\u0432\u043d\u044e\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 <a href=\"https:\/\/github.com\/igoradamenko\/awesome-made-by-russians\" rel=\"nofollow\">Awesome Made by Russians<\/a> \u0432\u043e\u0448\u043b\u043e 7 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Ruby:<br \/>  <a href=\"https:\/\/github.com\/github-changelog-generator\/github-changelog-generator\" rel=\"nofollow\">Github-changelog-generator<\/a>, <a href=\"https:\/\/github.com\/evil-icons\/evil-icons\" rel=\"nofollow\">Evil Icons<\/a>, <a href=\"https:\/\/github.com\/whitequark\/parser\" rel=\"nofollow\">Parser<\/a>, <a href=\"https:\/\/github.com\/Arkweid\/lefthook\" rel=\"nofollow\">Lefthook<\/a>, <a href=\"https:\/\/github.com\/anycable\/anycable\" rel=\"nofollow\">AnyCable<\/a>, <a href=\"https:\/\/github.com\/test-prof\/test-prof\" rel=\"nofollow\">Ruby Tests Profiling Toolbox<\/a>, <a href=\"https:\/\/github.com\/gazay\/gon\" rel=\"nofollow\">Gon<\/a>.<\/p>\n<h2>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438 \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/08\/04\/podcast-08-30.html\" rel=\"nofollow\">RWpod 30 \u0432\u044b\u043f\u0443\u0441\u043a 08 \u0441\u0435\u0437\u043e\u043d\u0430 \u2014 The State of Ruby 3 Typing, Infinite Scroll without Layout Shifts, Minesweeper, Starboard Notebook \u0438 \u043f\u0440\u043e\u0447\u0435\u0435<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/www.rwpod.com\/posts\/2020\/08\/10\/podcast-08-31.html\" rel=\"nofollow\">RWpod 31 \u0432\u044b\u043f\u0443\u0441\u043a 08 \u0441\u0435\u0437\u043e\u043d\u0430 \u2014 How to Test Ruby Code That Depends on External APIs, 1Keys, Noticed, Ancestry, Fast, Hopi \u0438 \u043f\u0440\u043e\u0447\u0435\u0435<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=pCI90ukKCME\" rel=\"nofollow\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440 DragonRuby. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/dev.to\/mkdev\/serverless-framework-introduction-let-s-create-a-telegram-bot-in-ruby-with-lambda-and-api-gateway-4o21\" rel=\"nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Serverless-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443: \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c Telegram-\u0431\u043e\u0442\u0430 \u043d\u0430 Ruby \u0441 AWS Lambda \u0438<br \/>  API Gateway<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=nOUPIa7tWpA\" rel=\"nofollow\">dry-validation \u2014 \u0414\u043b\u044f \u0447\u0435\u0433\u043e? \u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.codewithjason.com\/dockerize-rails-application\/\" rel=\"nofollow\">\u041a\u0430\u043a \u0434\u043e\u043a\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/web-crunch.com\/posts\/lets-build-for-ruby-and-rails-developers-part-4\" rel=\"nofollow\">\u00ab\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c\u00bb \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Ruby \u0438 Rails \u2014 \u0427\u0430\u0441\u0442\u044c 4 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/web-crunch.com\/posts\/lets-build-for-ruby-and-rails-developers-part-5\" rel=\"nofollow\">\u00ab\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c\u00bb \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Ruby \u0438 Rails \u2014 \u0427\u0430\u0441\u0442\u044c 5 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=YPc0sTXyesc\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0430\u0435\u043c Ruby \u0441 \u0425\u044d\u0441\u0443\u0441\u043e\u043c \u041a\u0430\u0441\u0442\u044d\u0439\u043e \u2014 \u043e\u0431\u0437\u043e\u0440 \u043d\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.0<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=9EL7y0kKzbc\" rel=\"nofollow\">\u0418\u0434\u0435\u0438 \u0444\u0430\u043d-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Ruby<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.driftingruby.com\/episodes\/apple-silicon-developer-transition-kit\" rel=\"nofollow\">Apple Silicon Developer Transition Kit \u0434\u043b\u044f Ruby-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/gorails.com\/episodes\/how-to-use-rails-i18n\" rel=\"nofollow\">\u041a\u0430\u043a \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Rails<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=R2QD7XxS-Dc&amp;feature=youtu.be\" rel=\"nofollow\">\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043a Rails: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 API<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f22\/161\/15a\/f2216115a374421495df9864acc847f0.png\" alt=\"image\"> <a href=\"https:\/\/www.youtube.com\/watch?v=Scffi4otlFc\" rel=\"nofollow\">\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0432 Rails \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Noticed?<\/a><\/p>\n<p>  <a href=\"https:\/\/remoteruby.transistor.fm\/89\" rel=\"nofollow\">Noticed (\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0432 Rails), \u043f\u0440\u0435\u0432\u044c\u044e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e Stimulus Reflex \u0438 \u043d\u0430\u0439\u043c \u0432 Podia<\/a><\/p>\n<p>  <a href=\"https:\/\/devchat.tv\/ruby-rogues\/rr-466-beating-impostor-syndrome-with-dylan-andrews\/\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0414\u0438\u043b\u0430\u043d\u043e\u043c \u042d\u043d\u0434\u0440\u044e\u0441\u043e\u043c<\/a> \u043e \u043f\u0443\u0442\u0438 \u0438\u0437 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0430\u0440\u0430\u0431\u0430\u043d\u0449\u0438\u043a\u0430 \u0434\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043e \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0438 \u0434\u0436\u0443\u043d\u0438\u043e\u0440\u043e\u0432 \u0438 \u043e\u0431 \u0443\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0438 \u0434\u043e\u0432\u0435\u0440\u0438\u044f.<br \/>  <a href=\"https:\/\/railswithjason.simplecast.fm\/matt-swanson\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u041c\u044d\u0442\u0442\u043e\u043c \u0421\u0432\u0435\u043d\u0441\u043e\u043d\u043e\u043c<\/a>, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c <a href=\"https:\/\/boringrails.com\/\" rel=\"nofollow\">Boring Rails<\/a>, \u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 SPA \u0441 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 Rails, \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430\u0445 FormBuilder \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0449\u0430\u0445.<br \/>  <a href=\"https:\/\/remoteruby.transistor.fm\/88\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0421\u0442\u0438\u0432\u043e\u043c \u041f\u043e\u043b\u0438\u0442\u043e<\/a> \u043e \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c<br \/>  \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 GitHub.<br \/>  <a href=\"https:\/\/devchat.tv\/ruby-rogues\/rr-467-rails-at-super-scale-with-kyle-doliveira\/\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0441 \u041a\u0430\u0439\u043b\u043e\u043c \u0434\u2019\u041e\u043b\u0438\u0432\u0435\u0439\u0440\u0430<\/a> \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Rails \u0432 <a href=\"https:\/\/superscale.com\" rel=\"nofollow\">Super Scale<\/a>.<br \/>  <a href=\"https:\/\/railswithjason.simplecast.fm\/cameron-dutro\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u041a\u044d\u043c\u0435\u0440\u043e\u043d\u043e\u043c \u0414\u0443\u0442\u0440\u043e<\/a> \u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 Rails \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Docker \u0438 Kubernetes.<br \/>  <a href=\"http:\/\/5by5.tv\/rubyonrails\/329\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0414\u0436\u0435\u0439\u0441\u043e\u043d\u043e\u043c \u0421\u0432\u0435\u0442\u0442\u043e\u043c<\/a> \u2014 \u0432\u0441\u0435 \u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u043e\u0432\u0435\u0442\u044b \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<br \/>  <a href=\"http:\/\/5by5.tv\/rubyonrails\/330\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u0420\u043e\u0431\u0431\u0438 \u0420\u0430\u0441\u0441\u0435\u043b\u043e\u043c<\/a> \u2014 Oh My Zsh \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 Rails.<\/p>\n<h2>\u041d\u043e\u0432\u0438\u043d\u043a\u0438<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/github.com\/DataDog\/datadog-lambda-rb\/tree\/v1.10.0\" rel=\"nofollow\">Datadog-lambda-rb<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/www.datadoghq.com\/\" rel=\"nofollow\">Datadog<\/a> \u0441 <a href=\"https:\/\/aws.amazon.com\/ru\/lambda\/\" rel=\"nofollow\">AWS Lambda<\/a> \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438 \u0432 \u00ab\u0437\u0440\u0435\u043b\u0443\u044e\u00bb \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/gitlab.com\/puppet-debugger\/puppet-debugger\/-\/tree\/v1.0.0\" rel=\"nofollow\">Puppet Debugger 1.0.0<\/a> \u2014 <a href=\"https:\/\/docs.puppet-debugger.com\/summary\/\" rel=\"nofollow\">\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 Puppet<\/a>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/github.com\/mokhan\/net-hippie\/tree\/v1.0.0\" rel=\"nofollow\">Net::Hippie 1.0.0<\/a> \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 Net::HTTP \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c JSON \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t-\/xh\/qq\/t-xhqqekquqr3nosk_tg264y4nc.png\"> <a href=\"https:\/\/rubygems.org\/gems\/fbcrawl-colly\/versions\/1.0.0\" rel=\"nofollow\">FbcrawlColly 1.0.0<\/a> \u2014 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 mbasic.facebook.com \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/www.go-colly.org\/\" rel=\"nofollow\">GO Colly<\/a>. <\/p>\n<h2>\u041d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438<\/h2>\n<p>  <a href=\"https:\/\/github.com\/refinery\/refinerycms-blog\/tree\/4.0.0\" rel=\"nofollow\">Refinery CMS Blog 4.0.0<\/a> \u2014 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f <a href=\"https:\/\/www.refinerycms.com\/\" rel=\"nofollow\">Refinery CMS<\/a>, \u0441\u0430\u043c\u043e\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 CMS \u043d\u0430 Ruby on Rails.<\/p>\n<p>  <a href=\"https:\/\/github.com\/lbeder\/health-monitor-rails\/tree\/v9.0.0\" rel=\"nofollow\">Health-monitor-rails 9.0.0<\/a> \u2014 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f Rails \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 (db, cache, sidekiq, redis \u0438 \u0434\u0440\u0443\u0433\u0438\u0445).<\/p>\n<p>  <a href=\"https:\/\/github.com\/heroku\/hatchet\/tree\/v7.0.0\" rel=\"nofollow\">Hatchet 7.0.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <a href=\"https:\/\/www.heroku.com\/\" rel=\"nofollow\">Heroku<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/kigster\/sym\/tree\/v3.0.0\" rel=\"nofollow\">Sym 3.0.0<\/a> \u2014 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"https:\/\/github.com\/square\/rails-auth\/tree\/v3.0.0\" rel=\"nofollow\">Rails::Auth 3.0.0<\/a> \u2014 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 claims-based \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/github.com\/theforeman\/kafo\/tree\/v5.0.0\" rel=\"nofollow\">Kafo 5.0.0<\/a> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 Foreman \u0438 Katello \u0434\u043b\u044f <a href=\"https:\/\/puppet.com\/docs\/puppet\/6.17\/modules_fundamentals.html\" rel=\"nofollow\">Puppet-\u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/a>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/github.com\/mcanevet\/rspec-puppet-facts\/tree\/2.0.0\" rel=\"nofollow\">Rspec-puppet-facts 2.0.0<\/a> \u2014 \u0433\u0435\u043c \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Puppet manifests \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  <a href=\"https:\/\/github.com\/theforeman\/foreman_remote_execution\/tree\/v4.0.0\" rel=\"nofollow\">Foreman Remote Execution 4.0.0<\/a> \u2014 \u043f\u043b\u0430\u0433\u0438\u043d \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f <a href=\"https:\/\/github.com\/theforeman\/foreman\" rel=\"nofollow\">Foreman<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/googleapis\/google-cloud-ruby\/tree\/google-cloud-bigtable\/v2.0.0\/google-cloud-bigtable\" rel=\"nofollow\">Ruby Google Cloud Bigtable API 2.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/cloud.google.com\/bigtable\" rel=\"nofollow\">Bigtable<\/a>, \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 NoSQL \u0421\u0423\u0411\u0414 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <a href=\"https:\/\/github.com\/googleapis\/google-cloud-ruby\/tree\/google-cloud-datastore\/v2.0.0\/google-cloud-datastore\" rel=\"nofollow\">Google-cloud-datastore 2.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/cloud.google.com\/datastore\/\" rel=\"nofollow\">Datastore<\/a>, \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0439<br \/>  NoSQL \u0421\u0423\u0411\u0414.<\/p>\n<p>  <a href=\"https:\/\/github.com\/googleapis\/google-cloud-ruby\/tree\/google-cloud-firestore\/v2.0.0\/google-cloud-firestore\" rel=\"nofollow\">Google Cloud Firestore API 2.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/cloud.google.com\/firestore\" rel=\"nofollow\">Firestore<\/a>, \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 serverless<br \/>  \u0431\u0430\u0437\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/github.com\/iGEL\/it\/tree\/v2.0.0\" rel=\"nofollow\">It 2.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/kzkn\/gretel\/tree\/v4.0.0\" rel=\"nofollow\">Gretel 4.0.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0446\u0435\u043f\u043e\u0447\u0435\u043a \u043d\u0430 Ruby on Rails.<\/p>\n<p>  <a href=\"https:\/\/github.com\/librariesio\/spdx\/tree\/v3.0.0\" rel=\"nofollow\">SPDX 3.0.0<\/a> \u2014 \u0433\u0438\u0431\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438.<\/p>\n<p>  <a href=\"https:\/\/github.com\/pawurb\/smart_init\/tree\/v5.0.0\" rel=\"nofollow\">Smart Init 5.0.0<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0435\u043c \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 (\u043c\u0435\u0442\u043e\u0434 initialize) \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  <a href=\"https:\/\/github.com\/cucumber\/gherkin-ruby\/tree\/v15.0.0\" rel=\"nofollow\">Gherkin for Ruby 15.0.0<\/a> \u2014 \u043f\u0430\u0440\u0441\u0435\u0440 \u044f\u0437\u044b\u043a\u0430 <a href=\"https:\/\/cucumber.io\/docs\/gherkin\/\" rel=\"nofollow\">Gherkin<\/a>.<\/p>\n<p>  <a href=\"https:\/\/github.com\/projectblacklight\/blacklight-marc\/tree\/v7.0.0\" rel=\"nofollow\">Blacklight::Marc 7.0.0<\/a> \u2014 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/MARC\" rel=\"nofollow\">MARC<\/a> \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b <a href=\"https:\/\/github.com\/projectblacklight\/blacklight\" rel=\"nofollow\">Blacklight<\/a>.<\/p>\n<h2>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  <a href=\"https:\/\/www.jruby.org\/2020\/08\/03\/jruby-9-2-13-0.html\" rel=\"nofollow\">JRuby 9.2.13.0<\/a> \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Ruby \u043d\u0430 JVM.<br \/>  <a href=\"https:\/\/github.com\/prawnpdf\/prawn\/tree\/2.3.0\" rel=\"nofollow\">Prawn 2.3.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f PDF-\u0444\u0430\u0439\u043b\u043e\u0432.<br \/>  <a href=\"https:\/\/github.com\/abonas\/kubeclient\/tree\/v4.9.0\" rel=\"nofollow\">Kubeclient 4.9.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/kubernetes.io\/docs\/reference\/using-api\/api-overview\/\" rel=\"nofollow\">Kubernetes REST API<\/a>.<br \/>  <a href=\"https:\/\/github.com\/presidentbeef\/brakeman\/tree\/v4.9.0\" rel=\"nofollow\">Brakeman 4.9.0<\/a> \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.<br \/>  <a href=\"https:\/\/github.com\/gollum\/gollum\/tree\/v5.1\" rel=\"nofollow\">Gollum 5.1.0<\/a> \u2014 <a href=\"https:\/\/github.com\/gollum\/gollum\/wiki\/Screenshots\" rel=\"nofollow\">\u043f\u0440\u043e\u0441\u0442\u0430\u044f wiki<\/a> \u043f\u043e\u0432\u0435\u0440\u0445 git-\u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>  <a href=\"https:\/\/gitlab.com\/gitlab-org\/gitlab\/-\/releases\/v13.2.0-ee\" rel=\"nofollow\">GitLab 13.2<\/a> \u2014 \u0432\u0435\u0431-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438 Git, Wiki, CI\/CD \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438.<br \/>  <a href=\"https:\/\/github.com\/omniauth\/omniauth-oauth2\/tree\/v1.7.0\" rel=\"nofollow\">OmniAuth OAuth2 1.7.0<\/a> \u2014 DSL \u0434\u043b\u044f OmniAuth OAuth2.<br \/>  <a href=\"https:\/\/github.com\/ankane\/chartkick\/tree\/v3.4.0\" rel=\"nofollow\">Chartkick 3.4.0<\/a> \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<br \/>  <a href=\"https:\/\/github.com\/aasm\/aasm\/tree\/v5.1.0\" rel=\"nofollow\">Aasm 5.1.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439.<br \/>  <a href=\"https:\/\/github.com\/mdp\/rotp\/tree\/v6.1.0\" rel=\"nofollow\">Rotp 6.1.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u043e\u043b\u0435\u0439.<br \/>  <a href=\"https:\/\/github.com\/tomdalling\/value_semantics\/tree\/v3.4.0\" rel=\"nofollow\">ValueSemantics 3.4.0<\/a> \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432-\u043e\u0431\u0435\u0440\u0442\u043e\u043a \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439 \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c.<br \/>  <a href=\"https:\/\/github.com\/test-kitchen\/test-kitchen\/tree\/v2.6.0\" rel=\"nofollow\">Test Kitchen 2.6.0<\/a> \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0434\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<br \/>  <a href=\"https:\/\/rubygems.org\/gems\/kitchen-vagrant\/versions\/1.7.0\" rel=\"nofollow\">Kitchen::Vagrant 1.7.0<\/a> \u2014 Kitchen-\u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f Vagrant.<br \/>  <a href=\"https:\/\/github.com\/stefankroes\/ancestry\/tree\/v3.1.0\" rel=\"nofollow\">Ancestry 3.1.0<\/a> \u2014 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ActiveRecord.<br \/>  <a href=\"https:\/\/github.com\/zendesk\/ruby-kafka\/tree\/v1.2.0\" rel=\"nofollow\">Ruby-kafka 1.2.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/kafka.apache.org\/\" rel=\"nofollow\">Apache Kafka<\/a>.<br \/>  <a href=\"https:\/\/github.com\/ankane\/pghero\/tree\/v2.7.0\" rel=\"nofollow\">PgHero<\/a> \u2014 <a href=\"https:\/\/pghero.dokkuapp.com\/\" rel=\"nofollow\">\u043f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a> \u0434\u043b\u044f <a href=\"https:\/\/www.postgresql.org\/\" rel=\"nofollow\">Postgres<\/a>.<br \/>  <a href=\"https:\/\/github.com\/aerospike\/aerospike-client-ruby\/tree\/v2.14.0\" rel=\"nofollow\">Aerospike Ruby Client 2.14.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f NoSQL \u0421\u0423\u0411\u0414 <a href=\"https:\/\/www.aerospike.com\/\" rel=\"nofollow\">Aerospike<\/a>.<br \/>  <a href=\"https:\/\/github.com\/Sage\/dynamodb_framework\/tree\/v1.9.0\" rel=\"nofollow\">DynamoDb Framework 1.9.0<\/a> \u2014 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f NoSQL \u0421\u0423\u0411\u0414 <a href=\"https:\/\/aws.amazon.com\/ru\/dynamodb\/\" rel=\"nofollow\">DynamoDB<\/a>.<br \/>  <a href=\"https:\/\/github.com\/elastic\/apm-agent-ruby\/tree\/v3.9.0\" rel=\"nofollow\">Elastic APM agent 3.9.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <a href=\"https:\/\/www.elastic.co\/guide\/en\/apm\/server\/master\/overview.html\" rel=\"nofollow\">Elastic APM<\/a>.<br \/>  <a href=\"https:\/\/github.com\/citusdata\/activerecord-multi-tenant\/tree\/v1.1.0\" rel=\"nofollow\">Activerecord-multi-tenant 1.1.0<\/a> \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f ActiveRecord c \u043c\u0443\u043b\u044c\u0442\u0438\u0442\u0435\u043d\u0430\u043d\u0442\u043d\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  <a href=\"https:\/\/github.com\/samg\/diffy\/tree\/3.4.0\" rel=\"nofollow\">Diffy 3.4.0<\/a> \u2014 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u0434\u0432\u0443\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<br \/>  <a href=\"https:\/\/github.com\/bkuhlmann\/refinements\/tree\/7.7.0\" rel=\"nofollow\">Refinements 7.7.0<\/a> \u2014 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 Ruby.<br \/>  <a href=\"https:\/\/github.com\/norman\/friendly_id\/tree\/5.4.0\" rel=\"nofollow\">FriendlyId 5.4.0<\/a> \u2014 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f url-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435.<br \/>  <a href=\"https:\/\/github.com\/pivotal\/LicenseFinder\/tree\/v6.8.0\" rel=\"nofollow\">License Finder 6.8.0<\/a> \u2014 \u043f\u043e\u0438\u0441\u043a \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445.<br \/>  <a href=\"https:\/\/github.com\/toy\/image_size\/tree\/v2.1.0\" rel=\"nofollow\">Image_size 2.1.0<\/a> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432.<br \/>  <a href=\"https:\/\/github.com\/dasch\/avro_turf\/tree\/v1.2.0\" rel=\"nofollow\">AvroTurf 1.2.0<\/a> \u2014 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <a href=\"http:\/\/avro.apache.org\/\" rel=\"nofollow\">Apache Avro<\/a>.<br \/>  <a href=\"https:\/\/github.com\/basecamp\/marginalia\/tree\/v1.9.0\" rel=\"nofollow\">Marginalia 1.9.0<\/a> \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a ActiveRecord-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c.<br \/>  <a href=\"https:\/\/github.com\/emad-elsaid\/rubrowser\/tree\/v2.9.0\" rel=\"nofollow\">Rubrowser (Ruby Browser) 2.9.0<\/a> \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0433\u0440\u0430\u0444\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<br \/>  <a href=\"https:\/\/github.com\/premailer\/premailer\/tree\/v1.13.0\" rel=\"nofollow\">Premailer 1.13.0<\/a> \u2014 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 HTML-\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0438\u0441\u0435\u043c.<br \/>  <a href=\"https:\/\/rubygems.org\/gems\/sendgrid-actionmailer\/versions\/3.1.0\" rel=\"nofollow\">SendGrid ActionMailer 3.1.0<\/a> \u2014 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f ActionMailer \u0441 <a href=\"https:\/\/sendgrid.com\/\" rel=\"nofollow\">SendGrid API<\/a>.<br \/>  <a href=\"https:\/\/github.com\/thoughtbot\/clearance\/tree\/v2.3.0\" rel=\"nofollow\">Clearance 2.3.0<\/a> \u2014 Rails-\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0447\u0442\u0443 \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.<br \/>  <a href=\"https:\/\/yhbt.net\/clogger\/NEWS.html\" rel=\"nofollow\">Clogger 2.3.0<\/a> \u2014 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 Rack.<br \/>  <a href=\"https:\/\/github.com\/radar\/distance_of_time_in_words\/tree\/v5.1.0\" rel=\"nofollow\">Dotiw 5.1.0<\/a> \u2014 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432 \u0441\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<br \/>  <a href=\"https:\/\/rubygems.org\/gems\/semaphore_test_boosters\/versions\/2.6.0\" rel=\"nofollow\">Semaphore_test_boosters 2.6.0<\/a> \u2014 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432.<br \/>  <a href=\"https:\/\/github.com\/jgarber623\/svgeez\/tree\/v3.2.0\" rel=\"nofollow\">Svgeez 3.2.0<\/a> \u2014 \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f SVG-\u0441\u043f\u0440\u0430\u0439\u0442\u0430 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \u0441 SVG-\u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438.<br \/>  <a href=\"https:\/\/github.com\/envato\/jwt_signed_request\/tree\/v2.6.0\" rel=\"nofollow\">JWT Signed Request<\/a> \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 API \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/JSON_Web_Token\" rel=\"nofollow\">JWT<\/a>.<br \/>  <a href=\"https:\/\/github.com\/jsanders\/angular_rails_csrf\/tree\/v4.4.0\" rel=\"nofollow\">Angular_rails_csrf 4.4.0<\/a> \u2014 CSRF-\u0437\u0430\u0449\u0438\u0442\u0430 \u0434\u043b\u044f Rails \u043d\u0430 AngularJS.<br \/>  <a href=\"https:\/\/github.com\/Shopify\/quilt\/tree\/v3.3.0\/gems\/quilt_rails\" rel=\"nofollow\">Quilt_rails 3.3.0<\/a> \u2014 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 <a href=\"https:\/\/github.com\/Shopify\/quilt\" rel=\"nofollow\">Quilt<\/a> \u0434\u043b\u044f Rails.<br \/>  <a href=\"https:\/\/github.com\/theforeman\/hammer-cli\/tree\/2.2.0\" rel=\"nofollow\">Hammer 2.2.0<\/a> \u2014 CLI-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/github.com\/mdub\/clamp\" rel=\"nofollow\">Clamp<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 <a href=\"https:\/\/github.com\/theforeman\/foreman\" rel=\"nofollow\">Foreman<\/a> \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e.<br \/>  <a href=\"https:\/\/github.com\/plivo\/plivo-ruby\/tree\/v4.9.0\" rel=\"nofollow\">Plivo Ruby SDK 4.9.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 <a href=\"https:\/\/www.plivo.com\/\" rel=\"nofollow\">Plivo REST API<\/a>.<br \/>  <a href=\"https:\/\/github.com\/onfido\/onfido-ruby\/tree\/1.1.0\" rel=\"nofollow\">Onfido 1.1.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/documentation.onfido.com\/\" rel=\"nofollow\">Onfido API<\/a>.<br \/>  <a href=\"https:\/\/github.com\/solidusio-contrib\/solidus_reviews\/tree\/v1.4.0\" rel=\"nofollow\">Solidus Reviews 1.4.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f eCommerce \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b <a href=\"https:\/\/solidus.io\/\" rel=\"nofollow\">Solidus<\/a>.<br \/>  <a href=\"https:\/\/github.com\/googleapis\/google-cloud-ruby\/tree\/google-cloud-spanner\/v2.1.0\/google-cloud-spanner\" rel=\"nofollow\">Google-cloud-spanner 2.1.0<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 <a href=\"https:\/\/cloud.google.com\/spanner\/\" rel=\"nofollow\">Google Cloud Spanner<\/a>.<br \/>  <a href=\"https:\/\/github.com\/launchdarkly\/api-client-ruby\/tree\/3.4.0\" rel=\"nofollow\">LaunchDarkly API Client 3.4.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f <a href=\"https:\/\/launchdarkly.com\/\" rel=\"nofollow\">LaunchDarkly <\/a>.<br \/>  <a href=\"https:\/\/github.com\/ebsco\/edsapi-ruby\/tree\/v1.1.0\" rel=\"nofollow\">Edsapi 1.1.0<\/a> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f API \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 <a href=\"https:\/\/www.ebsco.com\/\" rel=\"nofollow\">Ebsco<\/a>.<br \/>  <a href=\"https:\/\/github.com\/snltd\/wavefront-cli\/tree\/7.2.0\" rel=\"nofollow\">Wavefront CLI 7.2.0<\/a> \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f <a href=\"https:\/\/www.wavefront.com\/\" rel=\"nofollow\">Wavefront API<\/a>.<br \/>  <a href=\"https:\/\/rubygems.org\/gems\/neverbounce-api\/versions\/1.2.0\" rel=\"nofollow\">Neverbounce-api 1.2.0<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b<br \/>  \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 <a href=\"https:\/\/neverbounce.com\/\" rel=\"nofollow\">NeverBounce<\/a>.<\/p>\n<h2>\u041f\u043e\u0438\u0437\u0443\u0447\u0430\u0442\u044c<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/vc.ru\/life\/147200-zlye-marsiane-put-ot-dvuh-chelovek-v-kafe-do-ofisov-v-nyu-yorke-san-francisko-moskve-i-osake\" rel=\"nofollow\">\u0417\u043b\u044b\u0435 \u043c\u0430\u0440\u0441\u0438\u0430\u043d\u0435: \u043f\u0443\u0442\u044c \u043e\u0442 \u0434\u0432\u0443\u0445 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0432 \u043a\u0430\u0444\u0435 \u0434\u043e \u043e\u0444\u0438\u0441\u043e\u0432 \u0432 \u041d\u044c\u044e-\u0419\u043e\u0440\u043a\u0435, \u0421\u0430\u043d-\u0424\u0440\u0430\u043d\u0446\u0438\u0441\u043a\u043e, <br \/>  \u041c\u043e\u0441\u043a\u0432\u0435 \u0438 \u041e\u0441\u0430\u043a\u0435<\/a>.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/habr.com\/ru\/company\/solarsecurity\/blog\/512974\/\">\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ANTLR: \u043f\u0438\u0448\u0435\u043c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 Ruby<\/a>.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/habr.com\/ru\/post\/513994\/\">\u041c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Ruby On Rails<\/a>.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/514132\/\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440\u044b \u0432 Ruby \u0438 Python?<\/a><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/habr.com\/ru\/post\/514572\/\">\u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432 GitLab 13.2<\/a>.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bv\/n3\/ce\/bvn3ce5hflnbd7nfz-w4qyl6ikc.png\"> <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/_t\/9n\/d6\/_t9nd6o__3u2fyrf3bfcxtvvkb0.png\" alt=\"image\"> <a href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/514506\/\">\u041d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0430\u0439\u0434 \u043f\u043e Active Admin<\/a>.<br \/>  <a href=\"https:\/\/worklifewhatever.com\/ruby-on-rails-by-hartl\/\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0438\u0442\u0435 Ruby on Rails \u0434\u043e \u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f<\/a> \u2014 \u043e\u0431\u0437\u043e\u0440 \u043a\u043d\u0438\u0433\u0438 \u041c\u0430\u0439\u043a\u043b\u0430 \u0425\u0430\u0440\u0442\u043b\u0430 <a href=\"https:\/\/www.railstutorial.org\/\" rel=\"nofollow\">Ruby on Rails Tutorial<\/a>.<br \/>  <a href=\"https:\/\/superhighway.dev\/michael-hartl-interview\" rel=\"nofollow\">\u0418\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u0441 \u041c\u0430\u0439\u043a\u043b\u043e\u043c \u0425\u0430\u0440\u0442\u043b\u043e\u043c<\/a>, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c <a href=\"https:\/\/www.railstutorial.org\/\" rel=\"nofollow\">Ruby on Rails Tutorial<\/a> \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <a href=\"https:\/\/www.learnenough.com\/\" rel=\"nofollow\">Learn Enough<\/a>.<br \/>  <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-set-up-a-ruby-on-rails-graphql-api\" rel=\"nofollow\">\u041a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c GraphQL API \u0432 Ruby on Rails. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a>.<br \/>  <a href=\"https:\/\/medium.com\/dev-genius\/the-4-best-resources-i-used-to-learn-ruby-on-rails-on-the-job-7e25605668cc\" rel=\"nofollow\">4 \u043b\u0443\u0447\u0448\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f Ruby on Rails \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435<\/a>.<br \/>  <a href=\"https:\/\/blog.appsignal.com\/2020\/08\/05\/introduction-to-ruby-on-rails-patterns-and-anti-patterns.html\" rel=\"nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0438 \u0430\u043d\u0442\u0438-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043b\u044f Ruby on Rails<\/a>.<br \/>  <a href=\"https:\/\/www.nexmo.com\/blog\/2020\/08\/04\/record-a-call-in-ruby-with-vonage-voice-api-websockets\" rel=\"nofollow\">\u0417\u0430\u043f\u0438\u0441\u044c \u0437\u0432\u043e\u043d\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Vonage Voice API \u0434\u043b\u044f \u0432\u0435\u0431-\u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u043d\u0430 Ruby<\/a>.<br \/>  <a href=\"https:\/\/www.notonlycode.org\/12-ways-to-call-a-method-in-ruby\/\" rel=\"nofollow\">12 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0432 Ruby<\/a>.<br \/>  <a href=\"https:\/\/sorbet.org\/blog\/2020\/07\/30\/ruby-3-rbs-sorbet\" rel=\"nofollow\">\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 Ruby 3. RBS \u0438\u043b\u0438 RBI? \u0418 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 Sorbet?<\/a><br \/>  <a href=\"https:\/\/dev.to\/clouderie\/working-with-the-aws-sdk-for-ruby-part-i-4a73\" rel=\"nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 AWS SDK \u0434\u043b\u044f Ruby \u2014 \u0427\u0430\u0441\u0442\u044c I<\/a>.<br \/>  <a href=\"https:\/\/pawelurbanek.com\/rails-query-caching\" rel=\"nofollow\">\u041a\u0430\u043a \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 ActiveRecord \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a>.<br \/>  <a href=\"https:\/\/rossta.net\/blog\/visual-guide-to-webpacker.html\" rel=\"nofollow\">\u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Webpacker<\/a>.<br \/>  <a href=\"https:\/\/www.mskog.com\/posts\/autocomplete-in-ruby-on-rails-using-stimulus\/\" rel=\"nofollow\">\u0410\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 Ruby on Rails \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Stimulus<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/brandonbrown4792\/web-sockets-with-rails-6-and-reactjs-2c45\" rel=\"nofollow\">\u0412\u0435\u0431-\u0441\u043e\u043a\u0435\u0442\u044b \u0441 Rails 6 \u0438 ReactJS<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/_adrian_e_\/extend-ruby-with-c-14mh\" rel=\"nofollow\">\u041a\u0430\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c Ruby \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/aryaziai\/how-to-utilize-benchmarking-in-ruby-5ea0\" rel=\"nofollow\">\u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438\u043d\u0433 \u0432 Ruby<\/a>.<br \/>  <a href=\"https:\/\/beanbag.technicalissues.us\/otel-part-1-sinatra\/\" rel=\"nofollow\">\u0418\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0435\u043c OpenTelemetry \u0427\u0430\u0441\u0442\u044c 1: Sinatra<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/sulmanweb\/simple-todo-graphql-api-in-ruby-on-rails-and-mongodb-with-docker-part-01-40n7\" rel=\"nofollow\">\u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e GraphQL API \u043d\u0430 Ruby on Rails \u0438 MongoDB \u0441 Docker \u2014 \u0427\u0430\u0441\u0442\u044c 1<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/sulmanweb\/simple-todo-graphql-api-in-ruby-on-rails-and-mongodb-with-docker-part-02-3d2f\" rel=\"nofollow\">\u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e GraphQL API \u043d\u0430 Ruby on Rails \u0438 MongoDB \u0441 Docker \u2014 \u0427\u0430\u0441\u0442\u044c 2<\/a>.<br \/>  <a href=\"https:\/\/blog.rstankov.com\/testing-graphql-backend-in-product-hunt\/\" rel=\"nofollow\">\u041a\u0430\u043a \u0432 Product Hunt \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 GraphQL-\u0431\u044d\u043a\u044d\u043d\u0434<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/earthctzn\/how-to-build-an-api-with-ruby-on-rails-4a20\" rel=\"nofollow\">\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c API \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ruby On Rails<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/vshl\/ruby-on-rails-api-only-with-nested-resources-5akc\" rel=\"nofollow\">API \u043d\u0430 Ruby on Rails \u0441 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/ethanmgustafson\/getting-started-on-rspec-2k0p\" rel=\"nofollow\">RSpec \u0447\u0430\u0441\u0442\u044c 1: \u043d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u044b<\/a>.<br \/>  <a href=\"https:\/\/www.honeybadger.io\/blog\/ruby-external-api-test\/\" rel=\"nofollow\">\u041a\u0430\u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 API<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/ethanmgustafson\/rspec-hooks-subject-shared-examples-h19\" rel=\"nofollow\">RSpec \u0447\u0430\u0441\u0442\u044c 2: hooks, subjects, \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/ethanmgustafson\/rspec-pt-3-test-doubles-3mml\" rel=\"nofollow\">RSpec \u0447\u0430\u0441\u0442\u044c 3: \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0432\u043e\u0439\u043d\u0438\u043a\u0438<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/aws-heroes\/full-stack-serverless-with-rails-aws-sam-lambda-1jcm\" rel=\"nofollow\">Full Stack Serverless \u0441 Rails \u0438 AWS SAM\/Lambda<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/rossellafer\/learning-ruby-first-impressions-from-a-javascript-developer-1d11\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 Ruby: \u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 JavaScript<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/rossellafer\/learning-ruby-naming-conventions-5286\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 Ruby: \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u043c\u0435\u043d\u0430\u0445<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/rossellafer\/learning-ruby-string-concatenation-45kd\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 Ruby: \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/rossellafer\/learning-ruby-check-equality-51ng\" rel=\"nofollow\">\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 Ruby: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/brandonbrown4792\/intro-to-ruby-gems-53ei\" rel=\"nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Ruby Gems<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/vonagedev\/working-with-websockets-in-ruby-2a4g\" rel=\"nofollow\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 WebSockets \u0432 Ruby, Rack \u0438 Faye<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/caciquecoder\/implementing-a-state-machine-as-a-service-with-aasm-gem-3c9p\" rel=\"nofollow\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e aasm<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/deciduously\/prime-sieve-in-hopefully-idiomatic-ruby-and-some-books-you-should-read-5ed1\" rel=\"nofollow\">\u0420\u0435\u0448\u0435\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0432 \u0438\u0434\u0435\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c Ruby (\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043d\u0438\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c)<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/baweaver\/clocks-are-monoids-too-53ne\" rel=\"nofollow\">\u0427\u0430\u0441\u044b \u0442\u043e\u0436\u0435 \u043c\u043e\u043d\u043e\u0438\u0434\u044b!<\/a><br \/>  <a href=\"https:\/\/dev.to\/mainstreet\/tables-and-other-advanced-formatting-in-action-text-kind-of-1dbn\" rel=\"nofollow\">\u0422\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0434\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Action Text<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/thelogicwarlock\/how-to-properly-query-the-array-datatype-31n5\" rel=\"nofollow\">\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c sql-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u043f\u043e\u043b\u044f\u043c \u0441 \u0442\u0438\u043f\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432?<\/a><br \/>  <a href=\"https:\/\/ramallo.pw\/ruby\/2020\/08\/11\/when-objects-become-super-objects\" rel=\"nofollow\">\u041a\u043e\u0433\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438<\/a>.<br \/>  <a href=\"https:\/\/hint.io\/blog\/lambda-and-active-storage\" rel=\"nofollow\">Ruby on AWS Lambda: \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 ActiveStorage<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/doctolib\/make-rubocop-20x-faster-in-5-min-4pjo\" rel=\"nofollow\">\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c rubocop \u0432 20 \u0440\u0430\u0437 \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/ianvaughan\/moving-hasmanyattached-to-a-different-model-38g9\" rel=\"nofollow\">\u041f\u0435\u0440\u0435\u043d\u043e\u0441 has_many_attached \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c<\/a>.<br \/>  <a href=\"https:\/\/prathamesh.tech\/2020\/08\/10\/creating-unlogged-tables-in-rails\/\" rel=\"nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 (PostgreSQL) \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 Rails<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/nitinkatkam\/building-a-desktop-gui-app-with-ruby-3b0m\" rel=\"nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u043d\u0430 Ruby<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/ogdenstudios\/clients-servers-and-the-single-responsibility-principle-561e\" rel=\"nofollow\">\u041a\u043b\u0438\u0435\u043d\u0442\u044b, \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/amsmo\/web-scraping-in-ruby-great-practice-for-aspiring-web-developers-2k5a\" rel=\"nofollow\">\u0412\u0435\u0431-\u0441\u043a\u0440\u0430\u043f\u0438\u043d\u0433 \u043d\u0430 Ruby, \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/anilmaurya\/why-to-use-puma-in-production-for-your-rails-app-44ga\" rel=\"nofollow\">\u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Puma \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e Rails-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a>.<br \/>  <a href=\"https:\/\/dev.to\/lxxxvi\/how-to-use-graphiql-in-rails-42kf\" rel=\"nofollow\">\u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GraphiQL \u0432 Rails<\/a>.<br \/>  <a href=\"https:\/\/everydayrails.com\/2020\/08\/10\/rails-log-message-testing-rspec.html\" rel=\"nofollow\">2 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 Rails-\u043b\u043e\u0433\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e RSpec<\/a>.<\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/post\/513612\/\">\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 Ruby Digest<\/a>.<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/515854\/\"> https:\/\/habr.com\/ru\/post\/515854\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/515854\/\">\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e Ruby, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0441 1 \u043f\u043e 15 \u0430\u0432\u0433\u0443\u0441\u0442\u0430:<br \/>  \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u043c\u0435\u0434\u0438\u0430, \u043d\u043e\u0432\u0438\u043d\u043a\u0438, \u0440\u0435\u043b\u0438\u0437\u044b, \u0441\u0442\u0430\u0442\u044c\u0438, \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ig\/tf\/jq\/igtfjqfsr4v4yl9nohlqiyqoimo.png\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-308783","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/308783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=308783"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/308783\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=308783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=308783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=308783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}