1"use strict";(self.webpackChunkgatsby_starter_default=self.webpackChunkgatsby_starter_default||[]).push([[2014],{10440:function(n,a,s){s.r(a),s.d(a,{Head:function(){return y},default:function(){return b}});var e=s(28453),t=s(96540);function p(n){const a=Object.assign({h2:"h2",a:"a",span:"span",p:"p",strong:"strong",ul:"ul",li:"li"},(0,e.R)(),n.components);return t.createElement(t.Fragment,null,t.createElement(a.h2,{id:"messagepack",style:{position:"relative"}},t.createElement(a.a,{href:"#messagepack","aria-label":"messagepack permalink",className:"anchor before"},t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"MessagePack"),"\n",t.createElement(a.p,null,"MessagePack is an efficient ",t.createElement(a.strong,null,"binary data format")," used for exchanging\ndata between different programming languages.\nIt's like JSON,\nbut it aims to be:"),"\n",t.createElement(a.ul,null,"\n",t.createElement(a.li,null,"\n",t.createElement(a.p,null,t.createElement(a.strong,null,"Faster:"),"\nMessagePack serializes\nand\ndeserializes data much quicker than JSON,\noften resulting in significant performance improvements."),"\n"),"\n",t.createElement(a.li,null,"\n",t.createElement(a.p,null,t.createElement(a.strong,null,"Smaller:"),"\nMessagePack uses efficient encoding for common data types like integers\nand\nstrings,\nleading to smaller data payloads than JSON."),"\n"),"\n",t.createElement(a.li,null,"\n",t.createElement(a.p,null,t.createElement(a.strong,null,"More flexible:"),"\nMessagePack supports a broader range of data types than JSON,\nincluding binary data\nand\nnon-UTF-8 encoded strings."),"\n"),"\n"),"\n",t.createElement(a.p,null,"You can use the\n",t.createElement(a.a,{href:"https://github.com/msgpack/msgpack-ruby"},"msgpack-ruby"),"\ngem,\na library that allows you to serialize\nand\ndeserialize Ruby objects in the MessagePack format.\nThis gem makes it easy to leverage MessagePack's speed,\nefficiency,\nand\nflexibility advantages in your Ruby applications."),"\n",t.createElement(a.p,null,"This is how the gem can be used in Rails applications."),"\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby"><span class="token keyword">require</span> <span class="token string-literal"><span class="token string">"msgpack"</span></span>\n\nmsg <span class="token operator">=</span> <span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">.</span>to_msgpack\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"\\xABhello world"</span></span>\n\nMessagePack<span class="token punctuation">.</span>unpack<span class="token punctuation">(</span>msg<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"hello world"</span></span>\n\nmsg <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"a"</span></span><span class="token punctuation">,</span> <span class="token string-literal"><span class="token string">"b"</span></span><span class="token punctuation">,</span> <span class="token string-literal"><span class="token string">"c"</span></span><span class="token punctuation">]</span><span class="token punctuation">.</span>to_msgpack\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"\\x93\\xA1a\\xA1b\\xA1c"</span></span>\n\nMessagePack<span class="token punctuation">.</span>unpack<span class="token punctuation">(</span>msg<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"a"</span></span><span class="token punctuation">,</span> <span class="token string-literal"><span class="token string">"b"</span></span><span class="token punctuation">,</span> <span class="token string-literal"><span class="token string">"c"</span></span><span class="token punctuation">]</span> </code></pre></div>'}}),"\n",t.createElement(a.h2,{id:"before-rails-71",style:{position:"relative"}}
1,t.createElement(a.a,{href:"#before-rails-71","aria-label":"before rails 71 permalink",className:"anchor before"},t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"Before Rails 7.1"),"\n",t.createElement(a.p,null,"Before Rails 7.1,\nthere was no built-in support for serializing data using the MessagePack.\nYou need to install the\n",t.createElement(a.a,{href:"https://github.com/msgpack/msgpack-ruby"},"msgpack-ruby"),"\ngem\nand\nserialize the data."),"\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby">verifier <span class="token operator">=</span> ActiveSupport<span class="token double-colon punctuation">::</span><span class="token class-name">MessageVerifier</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token string-literal"><span class="token string">"secret_key"</span></span><span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token comment">#<ActiveSupport::MessageVerifier:0x00007fa6ffef7768 @digest="SHA1", @on_rotation=nil, @options={}, @rotations=[], @secret="secret_key", @serializer=Marshal></span>\n\ndata <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">.</span>with_indifferent_access<span class="token punctuation">,</span> <span class="token number">1.</span>to_f<span class="token punctuation">]</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token symbol">:user_id</span><span class="token operator">=></span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string-literal"><span class="token string">"user_id"</span></span><span class="token operator">=></span><span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">]</span>\n\nmessage <span class="token operator">=</span> verifier<span class="token punctuation">.</span>generate<span class="token punctuation">(</span>data<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"BAhbCUkiEGhlbGxvIHdvcmxkBjoGRVR7BjoMdXNlcl9pZGkGQzotQWN0aXZlU3VwcG9ydDo6SGFzaFdpdGhJbmRpZmZlcmVudEFjY2Vzc3sGSSIMdXNlcl9pZAY7AEZpB2YGMQ==--bf2f1bfbd0aa77be2b88154d73186c9c7a455e09"</span></span> \n\nverifier <span class="token operator">=</span> ActiveSupport<span class="token double-colon punctuation">::</span><span class="token class-name">MessageVerifier</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token string-literal"><span class="token string">"secret_key"</span></span><span class="token punctuation">,</span> <span class="token symbol">serializer</span><span class="token operator">:</span> MessagePack<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token comment">#<ActiveSupport::MessageVerifier:0x00007fa6fcfe98b8 @digest="SHA1", @on_rotation=nil, @options={:serializer
1=>MessagePack}, @rotations=[], @secret="secret_key", @serializer=MessagePack></span>\n\nmessage <span class="token operator">=</span> verifier<span class="token punctuation">.</span>generate<span class="token punctuation">(</span>data<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"lKtoZWxsbyB3b3JsZIGndXNlcl9pZAGBp3VzZXJfaWQCyz/wAAAAAAAA--9de5e87891c7370495f199750063dc2b52d9fe51"</span></span></code></pre></div>'}}),"\n",t.createElement(a.p,null,"As seen,\nyou need to pass MessagePack as the serializer explicitly.\nIf you were using JSON serializer,\nit had another issue with the data types of Ruby.\nMessagePack would return the correct class for the passed messages\nto the verifier."),"\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby"><span class="token comment"># When config.active_support.message_serializer = :json</span>\n\nverifier <span class="token operator">=</span> ActiveSupport<span class="token double-colon punctuation">::</span><span class="token class-name">MessageVerifier</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token string-literal"><span class="token string">"secret_key"</span></span><span class="token punctuation">)</span>\ndata <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">.</span>with_indifferent_access<span class="token punctuation">,</span> <span class="token number">1.</span>to_f<span class="token punctuation">]</span>\nmessage <span class="token operator">=</span> verifier<span class="token punctuation">.</span>generate<span class="token punctuation">(</span>data<span class="token punctuation">)</span>\n\nverifier<span class="token punctuation">.</span>verified<span class="token punctuation">(</span>message<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">.</span>with_indifferent_access<span class="token punctuation">,</span> <span class="token number">1.</span>to_f<span class="token punctuation">]</span>\n\nverifier<span class="token punctuation">.</span>verified<span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">.</span>map<span class="token punctuation">(</span><span class="token operator">&</span><span class="token symbol">:class</span><span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token builtin">String</span><span class="token punctuation">,</span> <span class="token builtin">Hash</span><span class="token punctuation">,</span> <span class="token builtin">Hash</span><span class="token punctuation">,</span> <span class="token builtin">Float</span><span class="token punctuation">]</span>\n\n<span class="token comment"># When config.active_support.message_serializer = :message_pack</span>\n\nverifier<span class="token punctuation">.</span>verified<span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">.</span>map<span class="token punctuation">(</span><span class="token operator">&</span><span class="token symbol">:class</span><span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token builtin">String</span><span class="token punctuation">,</span> <span class="token builtin">Hash</span><span class="token punctuation">,</span> ActiveSupport<span class="token double-colon punctuation">::</span>HashWithIndifferentAccess<span class="token punctuation">,</span> <span class="token builtin">Float</span><span class="token punctuation">]</span></code></pre></div>'}}),"\n",t.createElement(a.h2,{id:"in-rails-71",style:{position:"relative"}}
1,t.createElement(a.a,{href:"#in-rails-71","aria-label":"in rails 71 permalink",className:"anchor before"},t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<svg aria-hidden="true" height="20" version="1.1" viewBox="0 0 16 16" width="20"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>'}})),"In Rails 7.1"),"\n",t.createElement(a.p,null,t.createElement(a.a,{href:"https://github.com/rails/rails/pull/47770"},"Rails 7.1 adds\nActiveSupport::MessagePack"),".\nThis helped the Rails team\n",t.createElement(a.a,{href:"https://github.com/rails/rails/pull/47964"},"add support for message_pack\nas a message serializer"),"."),"\n",t.createElement(a.p,null,"To set the ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">message_pack</code>'}})," as the default serializer,\nadd the following line in the ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">config/application.rb</code>'}})," file."),"\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby"><span class="token comment"># config/application.rb</span>\n\nconfig<span class="token punctuation">.</span>active_support<span class="token punctuation">.</span>message_serializer <span class="token operator">=</span> <span class="token symbol">:message_pack</span></code></pre></div>'}}),"\n",t.createElement(a.p,null,"With this config,\nyou don't need to pass the ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:serializer</code>'}})," option to\nthe ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">ActiveSupport::MessageVerifier</code>'}})," instance."),"\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<div class="gatsby-highlight" data-language="ruby"><pre class="language-ruby"><code class="language-ruby">verifier <span class="token operator">=</span> ActiveSupport<span class="token double-colon punctuation">::</span><span class="token class-name">MessageVerifier</span><span class="token punctuation">.</span><span class="token keyword">new</span><span class="token punctuation">(</span><span class="token string-literal"><span class="token string">"secret_key"</span></span><span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token comment">#<ActiveSupport::MessageVerifier:0x00007fa6ffef7768 @digest="SHA1", @on_rotation=nil, @options={}, @rotations=[], @secret="secret_key", @serializer=MessagePack> </span>\n\ndata <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token symbol">user_id</span><span class="token operator">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">.</span>with_indifferent_access<span class="token punctuation">,</span> <span class="token number">1.</span>to_f<span class="token punctuation">]</span>\n <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string-literal"><span class="token string">"hello world"</span></span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token symbol">:user_id</span><span class="token operator">=></span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string-literal"><span class="token string">"user_id"</span></span><span class="token operator">=></span><span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">1.0</span><span class="token punctuation">]</span>\n\nmessage <span class="token operator">=</span> verifier<span class="token punctuation">.</span>generate<span class="token punctuation">(</span>data<span class="token punctuation">)</span>\n <span class="token operator">=></span> <span class="token string-literal"><span class="token string">"lKtoZWxsbyB3b3JsZIGndXNlcl9pZAGBp3VzZXJfaWQCyz/wAAAAAAAA--9de5e87891c7370495f199750063dc2b52d9fe51"</span></span> </code></pre></div>'}}),"\n",t.createElement(a.p,null,t.createElement(a.strong,null,"Note:")),"\n",t.createElement(a.p,null,"The ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:message_pack</code>'}})," serializer is implemented via ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">ActiveSupport::Messages::SerializerWithFallback</code>'}}),"\nand\ncan fall back to deserializing with ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">AS::JSON</code>'}}),".\nAdditionally,\nthe ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:marshal</code>'}}),",\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:json</code>'}}),",\nand\n",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:json_allow_marshal</code>'}})," serializers can fall back to deserializing with ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">AS::MessagePack</code>'}}),".\nThis feature also supports ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">:message_pack_allow_marshal</code>'}})," as a serializer,\nwhich can fall back to deserializing with Marshal as well as ",t.createElement(a.span,{dangerouslySetInnerHTML:{__html:'<code class="language-text">AS::JSON</code>'}}),"."),"\n",t.createElement(a.p,null,"To know more about this feature,\nplease refer to the following PRs:"),"\n",t.createElement(a.ul,null,"\n",t.createElement(a.li,null,"\n",t.createElement(a.p,null,t.createElement(a.a,{href:"https://github.com/rails/rails/pull/47770"},"Rails 7.1 adds ActiveSupport::MessagePack")),"\n"),"\n",t.createElement(a.li,null,"\n",t.createElement(a.p,null,t.createElement(a.a,{href:"https://github.com/rails/rails/pull/47964"},"Rails 7.1 adds support for MessagePack as a Message Serializer")),"\n"),"\n"))}var l=function(n){void 0===n&&(n={});const{wrapper:a}=Object.assign({},(0,e.R)(),n.components);return a?t.createElement(a,n,t.createElement(p,n)):p(n)},o=s(5588),c=s(65427),r=s(20504),i=s(43397),u=s(61942);const k=n=>n.replace(/\/+$/,""),g=(n,a)=>a?""+n+(a.startsWith("/")?a:"/"+a):n,m=(n,a)=>g(k(n),a),d=(n,a)=>g((n=>"undefined"!=typeof window?window.location.origin:k(n))(n),a),h=(n,a)=>{const s=(0,o.d)(a);
1return s?m(n,s):(n=>m(n,"/shakacode-og.png"))(n)},f=n=>{let{data:a,location:s,children:e}=n;const{frontmatter:p}=a.mdx,{siteUrl:l}=a.site.siteMetadata,o=d(l,s.pathname);return t.createElement(t.Fragment,null,t.createElement(c.A,null),t.createElement(r.A,{header:t.createElement(u.r,{breadcrumb:p.title}),main:t.createElement(t.Fragment,null,t.createElement(u.c,{body:e,title:p.title,author:p.author,date:p.date,link:o,categories:p.categories,featuredImage:p.featuredImage,showFeaturedImage:p.showFeaturedImage}),t.createElement(i.LN,null))}))};function b(n){return t.createElement(f,n,t.createElement(l,n))}const y=n=>{let{data:a,location:s}=n;const{frontmatter:e,excerpt:p}=a.mdx,{siteMetadata:l}=a.site,{siteUrl:o,title:c,description:r}=l,i=((n,a,s)=>n.excerpt||a||s)(e,p,r),u=h(o,e.featuredImage),k=m(o,s.pathname);return t.createElement(t.Fragment,null,t.createElement("title",null,e.title+" | "+c),t.createElement("link",{rel:"canonical",href:k}),t.createElement("meta",{name:"description",content:i}),t.createElement("meta",{property:"og:title",content:e.title}),t.createElement("meta",{property:"og:description",content:i}),t.createElement("meta",{property:"og:type",content:"article"}),t.createElement("meta",{property:"og:url",content:k}),t.createElement("meta",{property:"og:image",content:u}),t.createElement("meta",{name:"image",content:u}),t.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),t.createElement("meta",{name:"twitter:title",content:e.title}),t.createElement("meta",{name:"twitter:description",content:i}),t.createElement("meta",{name:"twitter:image",content:u}))}}}]); 2//# sourceMappingURL=component---src-template-blog-article-tsx-content-file-path-src-posts-rails-7-1-adds-message-pack-as-message-serializer-index-mdx-8053aeb6160162001207.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.