{"id":5664,"date":"2017-06-19T18:21:45","date_gmt":"2017-06-20T01:21:45","guid":{"rendered":"https:\/\/www.backerkit.com\/blog\/?p=5664"},"modified":"2020-02-21T00:40:59","modified_gmt":"2020-02-21T08:40:59","slug":"building-and-deploying-ruby-docker-images-with-circleci-and-heroku","status":"publish","type":"post","link":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/","title":{"rendered":"Building and Deploying Ruby Docker Images with CircleCI and Heroku"},"content":{"rendered":"<span class=\"cb-itemprop\" itemprop=\"reviewBody\"><p>Heroku makes it dead simple to deploy and operate apps; Docker makes it even easier! Heroku has a <a href=\"https:\/\/devcenter.heroku.com\/articles\/container-registry-and-runtime\">Docker runtime<\/a> in beta.<\/p>\n<p>This article will review how to setup a simple Ruby app to build and deploy as a Docker container on Heroku using <a href=\"https:\/\/circleci.com\/\">CircleCI<\/a>.<\/p>\n<h2>The app we&#8217;ll be using<\/h2>\n<p>We run a dashboard for internal use with a range of widgets that give us data about various events in the company and application. We use <a href=\"https:\/\/github.com\/Smashing\/smashing\">Smashing<\/a>, which is a Sinatra-esque Ruby framework for building dashboards.<\/p>\n<h2>Setting up the Dockerfile<\/h2>\n<p>Heroku recently released their new <a href=\"https:\/\/devcenter.heroku.com\/articles\/heroku-16-stack\">Heroku-16<\/a> stack. We&#8217;ll base our image off it. We&#8217;ll then install required system dependencies so we can install gems. Next we&#8217;ll install <code>bundler<\/code> and our gem dependencies. From there we&#8217;ll give the container a default <code>CMD<\/code> that will boot up the dashboard.<\/p>\n<pre><code>FROM heroku\/heroku:16\n\nRUN apt-get update -qq &amp;&amp; apt-get install -y \\\n  build-essential \\\n  libpq-dev \\\n  nodejs \\\n  ruby-dev\nRUN mkdir \/my_dashboard\nWORKDIR \/my_dashboard\nADD Gemfile \/my_dashboard\/Gemfile\nADD Gemfile.lock \/my_dashboard\/Gemfile.lock\nRUN gem install bundler\nRUN bundle install\nADD . \/my_dashboard\nCMD rackup --port=$PORT\n<\/code><\/pre>\n<p>In order to build this image, we&#8217;ll need to install Docker. Assuming we&#8217;re on Mac, we&#8217;ll head over <a href=\"https:\/\/docs.docker.com\/docker-for-mac\/install\/#download-docker-for-mac\">here<\/a> to install Docker. Once we&#8217;ve installed Docker, we&#8217;ll <code>cd<\/code> into the project directory and run the following commands:<\/p>\n<pre><code>docker build . -t my_dashboard\ndocker run -p 9292:9292 my_dashboard rackup\n<\/code><\/pre>\n<p>Now we should have the app up and running!<\/p>\n<p>If everything looks good, deploy the image manually to Heroku using the following commands.<\/p>\n<pre><code>heroku plugins:install heroku-container-registry\nheroku container:login\nheroku container:push\nheroku open\n<\/code><\/pre>\n<p>Our dashboard is alive on Docker!<\/p>\n<h2>Building and deploying via CI<\/h2>\n<p>We want to be able to deploy our app from our continuous integration system instead of pushing manually. We&#8217;ll use CircleCI.<\/p>\n<p>Add a <code>circle.yml<\/code> file to our project with the following config.<\/p>\n<pre><code>machine:\n  services:\n    - docker\n\ndependencies:\n  override:\n    - echo \"no deps\"\n\ntest:\n  post:\n    - echo \"yay - no tests\"\n\ndeployment:\n  production:\n    branch: master\n    commands:\n      - docker build -t my_dashboard .\n      - docker login --email=_ --username=_ --password=$HEROKU_TOKEN registry.heroku.com\n      - docker tag my_dashboard:latest registry.heroku.com\/my_dashboard\/web\n      - docker push registry.heroku.com\/my_dashboard\/web\n<\/code><\/pre>\n<p>We&#8217;ll need to configure an environment variable for <code>HEROKU_TOKEN<\/code> (taken from our Heroku dashboard) so Circle can authenticate against the Heroku container registry.<\/p>\n<p>Upon the next successful <code>master<\/code> build, we should see our image be built and then deployed to Heroku all from CI!<\/p>\n<h2>Open questions<\/h2>\n<p>Working with Docker raises some open questions around developer workflow, especially for more complicated applications (e.g. those with a separate worker process).<\/p>\n<p>Here are some of the issues:<\/p>\n<ul>\n<li>How do we run tests? Do we build an image (including test gems) and run tests against it?<\/li>\n<li>How would we manage compiling assets if we needed to?<\/li>\n<li>How do we ergonomically deploy multiple processes (assuming one process per container)?<\/li>\n<\/ul>\n<h2>Further reading<\/h2>\n<p>This post is just a taste of working with Docker. If you&#8217;re interested, check out the following resources to learn more.<\/p>\n<ul>\n<li>Docker <a href=\"https:\/\/training.docker.com\/introduction-to-docker\">video intro<\/a><\/li>\n<li><a href=\"https:\/\/www.toptal.com\/devops\/getting-started-with-docker-simplifying-devops\">Written tutorial<\/a> on getting started<\/li>\n<li>Introduction to <a href=\"https:\/\/docs.docker.com\/compose\/overview\">Docker Compose<\/a> if you want to have multiple containers coordinating with each other<\/li>\n<li>Overview of <a href=\"https:\/\/docs.docker.com\/registry\/#next\">using registries<\/a><\/li>\n<\/ul>\n<\/span>","protected":false},"excerpt":{"rendered":"<p>Heroku makes it dead simple to deploy and operate apps; Docker makes it even easier! Heroku has a Docker runtime in beta. This article will review how to setup a simple Ruby app to build and deploy as a Docker container on Heroku using CircleCI. The app we&#8217;ll be using We run a dashboard for [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":5699,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[45],"tags":[],"class_list":["post-5664","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering"],"acf":[],"yoast_head":"\n<title>Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit\" \/>\n<meta name=\"twitter:description\" content=\"Heroku makes it dead simple to deploy and operate apps; Docker makes it even easier! Heroku has a Docker runtime in beta. This article will review how to setup a simple Ruby app to build and deploy as a Docker container on Heroku using CircleCI. The app we&#8217;ll be using We run a dashboard for [&hellip;]\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png\" \/>\n<meta name=\"twitter:creator\" content=\"@simontaranto\" \/>\n<meta name=\"twitter:site\" content=\"@backerkit\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon Taranto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\"},\"author\":{\"name\":\"Simon Taranto\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/860d1b2b8b38a20bce936391e5ed85de\"},\"headline\":\"Building and Deploying Ruby Docker Images with CircleCI and Heroku\",\"datePublished\":\"2017-06-20T01:21:45+00:00\",\"dateModified\":\"2020-02-21T08:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\"},\"wordCount\":409,\"publisher\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png\",\"articleSection\":[\"Engineering\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\",\"url\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\",\"name\":\"Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit\",\"isPartOf\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png\",\"datePublished\":\"2017-06-20T01:21:45+00:00\",\"dateModified\":\"2020-02-21T08:40:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage\",\"url\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png\",\"contentUrl\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png\",\"width\":1558,\"height\":748},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.backerkit.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building and Deploying Ruby Docker Images with CircleCI and Heroku\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#website\",\"url\":\"https:\/\/www.backerkit.com\/blog\/\",\"name\":\"Crowdfunding Blog &amp; Resources | BackerKit\",\"description\":\"The BackerKit crowdfunding blog provides expert advice and success stories to help you plan, manage, and deliver a successful crowdfunding campaign.\",\"publisher\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.backerkit.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#organization\",\"name\":\"BackerKit\",\"url\":\"https:\/\/www.backerkit.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/02\/BackerKit-logo.png\",\"contentUrl\":\"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/02\/BackerKit-logo.png\",\"width\":1200,\"height\":345,\"caption\":\"BackerKit\"},\"image\":{\"@id\":\"https:\/\/www.backerkit.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Backerkit\/\",\"https:\/\/x.com\/backerkit\",\"https:\/\/www.instagram.com\/backerkit\/\",\"https:\/\/www.linkedin.com\/company\/backerkit\",\"https:\/\/www.youtube.com\/channel\/UC3gch2VsESfv0XW36W7BBQg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/860d1b2b8b38a20bce936391e5ed85de\",\"name\":\"Simon Taranto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/90212df57bf38f6f4e9cc846a23e49e9b9e19e8a5b8c32d5d01ec4d2fbd8b227?s=96&d=monsterid&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/90212df57bf38f6f4e9cc846a23e49e9b9e19e8a5b8c32d5d01ec4d2fbd8b227?s=96&d=monsterid&r=pg\",\"caption\":\"Simon Taranto\"},\"sameAs\":[\"http:\/\/www.backerkit.com\",\"https:\/\/x.com\/simontaranto\"],\"url\":\"https:\/\/www.backerkit.com\/blog\/author\/simon\/\"}]}<\/script>\n","yoast_head_json":{"title":"Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/","twitter_card":"summary_large_image","twitter_title":"Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit","twitter_description":"Heroku makes it dead simple to deploy and operate apps; Docker makes it even easier! Heroku has a Docker runtime in beta. This article will review how to setup a simple Ruby app to build and deploy as a Docker container on Heroku using CircleCI. The app we&#8217;ll be using We run a dashboard for [&hellip;]","twitter_image":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png","twitter_creator":"@simontaranto","twitter_site":"@backerkit","twitter_misc":{"Written by":"Simon Taranto","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#article","isPartOf":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/"},"author":{"name":"Simon Taranto","@id":"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/860d1b2b8b38a20bce936391e5ed85de"},"headline":"Building and Deploying Ruby Docker Images with CircleCI and Heroku","datePublished":"2017-06-20T01:21:45+00:00","dateModified":"2020-02-21T08:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/"},"wordCount":409,"publisher":{"@id":"https:\/\/www.backerkit.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage"},"thumbnailUrl":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png","articleSection":["Engineering"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/","url":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/","name":"Building and Deploying Ruby Docker Images with CircleCI and Heroku | BackerKit","isPartOf":{"@id":"https:\/\/www.backerkit.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage"},"image":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage"},"thumbnailUrl":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png","datePublished":"2017-06-20T01:21:45+00:00","dateModified":"2020-02-21T08:40:59+00:00","breadcrumb":{"@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#primaryimage","url":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png","contentUrl":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/06\/Building-and-Deploying-Ruby-Docker-Images-with-CircleCI-and-Heroku.png","width":1558,"height":748},{"@type":"BreadcrumbList","@id":"https:\/\/www.backerkit.com\/blog\/building-and-deploying-ruby-docker-images-with-circleci-and-heroku\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.backerkit.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Building and Deploying Ruby Docker Images with CircleCI and Heroku"}]},{"@type":"WebSite","@id":"https:\/\/www.backerkit.com\/blog\/#website","url":"https:\/\/www.backerkit.com\/blog\/","name":"Crowdfunding Blog &amp; Resources | BackerKit","description":"The BackerKit crowdfunding blog provides expert advice and success stories to help you plan, manage, and deliver a successful crowdfunding campaign.","publisher":{"@id":"https:\/\/www.backerkit.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.backerkit.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.backerkit.com\/blog\/#organization","name":"BackerKit","url":"https:\/\/www.backerkit.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backerkit.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/02\/BackerKit-logo.png","contentUrl":"https:\/\/www.backerkit.com\/blog\/wp-content\/uploads\/2017\/02\/BackerKit-logo.png","width":1200,"height":345,"caption":"BackerKit"},"image":{"@id":"https:\/\/www.backerkit.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Backerkit\/","https:\/\/x.com\/backerkit","https:\/\/www.instagram.com\/backerkit\/","https:\/\/www.linkedin.com\/company\/backerkit","https:\/\/www.youtube.com\/channel\/UC3gch2VsESfv0XW36W7BBQg"]},{"@type":"Person","@id":"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/860d1b2b8b38a20bce936391e5ed85de","name":"Simon Taranto","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backerkit.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/90212df57bf38f6f4e9cc846a23e49e9b9e19e8a5b8c32d5d01ec4d2fbd8b227?s=96&d=monsterid&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/90212df57bf38f6f4e9cc846a23e49e9b9e19e8a5b8c32d5d01ec4d2fbd8b227?s=96&d=monsterid&r=pg","caption":"Simon Taranto"},"sameAs":["http:\/\/www.backerkit.com","https:\/\/x.com\/simontaranto"],"url":"https:\/\/www.backerkit.com\/blog\/author\/simon\/"}]}},"_links":{"self":[{"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/posts\/5664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/comments?post=5664"}],"version-history":[{"count":10,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/posts\/5664\/revisions"}],"predecessor-version":[{"id":5729,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/posts\/5664\/revisions\/5729"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/media\/5699"}],"wp:attachment":[{"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/media?parent=5664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/categories?post=5664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.backerkit.com\/blog\/wp-json\/wp\/v2\/tags?post=5664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}