{"id":9049,"date":"2016-03-17T18:40:36","date_gmt":"2016-03-17T15:40:36","guid":{"rendered":"http:\/\/blog.altoros.com\/?p=9049"},"modified":"2019-05-26T18:33:09","modified_gmt":"2019-05-26T15:33:09","slug":"the-ibm-bluemix-object-storage-service-in-ruby-projects","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/","title":{"rendered":"Using IBM Bluemix Object Storage in Ruby Projects"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#How_it_works\" >How it works<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#How_to_use_it\" >How to use it<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#A_code_sample\" >A code sample<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"How_it_works\"><\/span>How it works<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>You&#8217;ve probably heard about the announcement of <a href=\"https:\/\/developer.ibm.com\/bluemix\/2016\/02\/15\/object-storage-for-bluemix-available\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bluemix Object Storage<\/a>\u2014this technical overview explains why and how to use it for your Ruby project.<\/p>\n<p><img decoding=\"async\" class=\"alignright size-full wp-image-9055\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-service.png\" alt=\"ibm-bluemix-object-storage-service\" width=\"160\" \/><\/p>\n<p>When writing scalable or distributed applications, developers often face the necessity of sharing rarely changing binary data between app instances. In case of one application instance, the data, such as user-uploaded images, is usually stored on the hard drive.<\/p>\n<p>Traditional databases do not handle this type of data quite well, so cloud storage services like IBM Object Storage for Bluemix can be used instead. They make operating large amounts of unstructured data almost as easy as reading\/writing a local file. Among IBM Object Storage analogs are Amazon S3, Azure Blob Storage, and Google Cloud Storage.<\/p>\n<p>Using Bluemix Object Storage saves you from implementing a file synchronization solution from scratch or setting up NFS that does not provide very impressive performance as well as may cause lots of technical troubles for heavy workloads.<\/p>\n<p><center><img decoding=\"async\" class=\"aligncenter size-large wp-image-9050\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796.png\" alt=\"ibm-bluemix-object-storage-object-space\" width=\"640\" \/><small>Object Space used by servers only<\/small><\/center><\/p>\n<p>Bluemix Object Storage gives 5 GB of free storage. For further pricing details, see the <a href=\"https:\/\/cloud.ibm.com\/catalog\/services\/object-storage\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bluemix Catalog<\/a>.<\/p>\n<p><center><img decoding=\"async\" class=\"aligncenter size-large wp-image-9051\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-service-object-space-1024x865.png\" alt=\"ibm-bluemix-object-storage-service-object-space\" width=\"640\" \/><small>Object Space serving data directly for clients and for app servers<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_to_use_it\"><\/span>How to use it<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Ruby (on Rails) applications typically use one of the available gems that provide file uploading capabilities. Most popular are Paperclip and CarrierWave. Both of them support <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog<\/code> storage, which in its turn supports Object Storage among other cloud storage services.<\/p>\n<p>When searching for how to use Bluemix Object Storage with Ruby, I found a couple of Stack Overflow questions. None of the suggested solutions worked for me, so I decided to dig into the problem myself. Here&#8217;s what I&#8217;ve figured out.<\/p>\n<p>To use Bluemix Object Storage with CarrierWave or Paperclip, set the storage option to <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">:fog<\/code>. Fog is a Ruby cloud services library, and it provides a common interface for many cloud provider services, including Object Storage. Make sure you have <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog<\/code> and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog-openstack<\/code> in your <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">Gemfile<\/code>.<\/p>\n<p>For using Bluemix with Paperclip, check out the <a href=\"https:\/\/gist.github.com\/gekola\/1306e41989a398dc14b7#file-paperclip_test-rb\" target=\"_blank\" rel=\"noopener noreferrer\">paperclip_test.rb<\/a> configuration. (Important lines are 21-37.) With CarrierWave, use <a href=\"https:\/\/gist.github.com\/gekola\/1306e41989a398dc14b7#file-carrierwave_test-rb\" target=\"_blank\" rel=\"noopener noreferrer\">carrierwave_test.rb<\/a>. (Important lines are 8-19.)<\/p>\n<p>The <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">auth_url<\/code> value from the Object Storage page does not work, and you need to append <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">\/v3\/auth\/tokens<\/code> to it. The result should look like the following: <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">https:\/\/lon-identity.open.softlayer.com\/v3\/auth\/tokens<\/code>. I couldn\u2019t get it working with v2.0 URLs though the auth server claimed to support it; but v3 worked just fine. Let us know if you sorted it out.<\/p>\n<p>If you do not specify <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">user_id<\/code>, you should provide <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">username<\/code> with <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">domain_name<\/code>. If you specify both <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">username<\/code> and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">user_id<\/code>, then <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">username<\/code> will be ignored.<\/p>\n<p>The <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog_directory<\/code> value should match to an existing container. (You have to create one before uploading any files, and it is <strong>not<\/strong> created automatically.) Unlike containers, directories within the container are created upon file uploading as needed. Bluemix Object Storage does not have size limits for uploading files. Internally, it handles large files as a set of smaller ones.<\/p>\n<p>Note that currently you have to use the version of the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog-openstack<\/code> gem from <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">master<\/code>. The Bluemix Object Storage authentication fixes will be included in <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">fog-openstack<\/code> versions above 0.1.1.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"A_code_sample\"><\/span>A code sample<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you want an example of a working CarrierWave uploader or Paperclip model for Bluemix Object Storage, clone <a href=\"https:\/\/gist.github.com\/1306e41989a398dc14b7.git\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gist.github.com\/1306e41989a398dc14b7.git<\/a>, specify your Object Storage credentials in the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">credentials.yml<\/code> file, and create the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">test_uploads<\/code> container in the Bluemix console. Make sure you run <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">bundle install<\/code> before executing test scripts. Use <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ruby carrierwave_test.rb<\/code> for CarrierWave and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ruby paperclip_test.rb<\/code> for Paperclip.<\/p>\n<p>The results of running <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ruby carrierwave_test.rb<\/code> and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ruby paperclip_test.rb<\/code> are on the screenshots.<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9052\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-ruby-carrierwave.png\" alt=\"ibm-bluemix-object-storage-ruby-carrierwave\" width=\"431\" height=\"116\" \/><small>CarrierWave<\/small><\/center><\/p>\n<p>&nbsp;<br \/>\n<center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-ruby-paperclip.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9053\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-ruby-paperclip-1024x167.png\" alt=\"ibm-bluemix-object-storage-ruby-paperclip\" width=\"640\" height=\"157\" \/><\/a><small>Paperclip<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/getting-started-with-ibm-bluemix-deploying-a-sample-ruby-sinatra-app\/\">Getting Started with IBM Bluemix: Deploying a Sample Ruby\/Sinatra App<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/continuous-integration-and-continuous-delivery-in-ibm-bluemix\/\">Continuous Integration and Continuous Delivery in IBM Bluemix<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/demo-building-java-apps-with-bluemix-and-db2\/\">Building Java Apps with IBM Bluemix and DB2<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<hr\/>\n<p><center><small>The post was written by Nick Herman and then edited by Victoria Fedzkovich and <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How it works<\/p>\n<p>You&#8217;ve probably heard about the announcement of Bluemix Object Storage\u2014this technical overview explains why and how to use it for your Ruby project.<\/p>\n<\/p>\n<p>When writing scalable or distributed applications, developers often face the necessity of sharing rarely changing binary data between app instances. In case of one application instance, [&#8230;]<\/p>\n","protected":false},"author":78,"featured_media":43454,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,187],"class_list":["post-9049","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-ibm-bluemix"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using IBM Bluemix Object Storage in Ruby Projects | Altoros<\/title>\n<meta name=\"description\" content=\"A new service from IBM enables developers to store, access, and manage unstructured data for cloud-based applications.\" \/>\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.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using IBM Bluemix Object Storage in Ruby Projects | Altoros\" \/>\n<meta property=\"og:description\" content=\"How it works You&#8217;ve probably heard about the announcement of Bluemix Object Storage\u2014this technical overview explains why and how to use it for your Ruby project. When writing scalable or distributed applications, developers often face the necessity of sharing rarely changing binary data between app instances. In case of one application instance, [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-17T15:40:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-26T15:33:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"796\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nick Herman\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nick Herman\" \/>\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\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/\",\"name\":\"Using IBM Bluemix Object Storage in Ruby Projects | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png\",\"datePublished\":\"2016-03-17T15:40:36+00:00\",\"dateModified\":\"2019-05-26T15:33:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png\",\"width\":1024,\"height\":796},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using IBM Bluemix Object Storage in Ruby Projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff\",\"name\":\"Nick Herman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg\",\"caption\":\"Nick Herman\"},\"description\":\"Nick Herman is a software engineer at Altoros. He specializes in web development using Ruby and JavaScript as his primary tools. Nick also has professional interests and expertise in many other areas related to software engineering, including programming languages and cloud technologies. You can find him on GitHub.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/nick-herman\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using IBM Bluemix Object Storage in Ruby Projects | Altoros","description":"A new service from IBM enables developers to store, access, and manage unstructured data for cloud-based applications.","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.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/","og_locale":"en_US","og_type":"article","og_title":"Using IBM Bluemix Object Storage in Ruby Projects | Altoros","og_description":"How it works You&#8217;ve probably heard about the announcement of Bluemix Object Storage\u2014this technical overview explains why and how to use it for your Ruby project. When writing scalable or distributed applications, developers often face the necessity of sharing rarely changing binary data between app instances. In case of one application instance, [...]","og_url":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/","og_site_name":"Altoros","article_published_time":"2016-03-17T15:40:36+00:00","article_modified_time":"2019-05-26T15:33:09+00:00","og_image":[{"width":1024,"height":796,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png","type":"image\/png"}],"author":"Nick Herman","twitter_misc":{"Written by":"Nick Herman","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/","url":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/","name":"Using IBM Bluemix Object Storage in Ruby Projects | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png","datePublished":"2016-03-17T15:40:36+00:00","dateModified":"2019-05-26T15:33:09+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/03\/ibm-bluemix-object-storage-object-space-1024x796-1.png","width":1024,"height":796},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/the-ibm-bluemix-object-storage-service-in-ruby-projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using IBM Bluemix Object Storage in Ruby Projects"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/f18d50b9edfbcdc995be899e3edb42ff","name":"Nick Herman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/328df9f-150x150.jpg","caption":"Nick Herman"},"description":"Nick Herman is a software engineer at Altoros. He specializes in web development using Ruby and JavaScript as his primary tools. Nick also has professional interests and expertise in many other areas related to software engineering, including programming languages and cloud technologies. You can find him on GitHub.","url":"https:\/\/www.altoros.com\/blog\/author\/nick-herman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=9049"}],"version-history":[{"count":19,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9049\/revisions"}],"predecessor-version":[{"id":43465,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/9049\/revisions\/43465"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/43454"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=9049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=9049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=9049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}