<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Ruby - Category - // TODO: Fix Later (2019)</title><link>https://viktor.dev/en/categories/ruby/</link><description>Ruby - Category - // TODO: Fix Later (2019)</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>email@viktor.dev (Viktor Chukhantsev)</managingEditor><webMaster>email@viktor.dev (Viktor Chukhantsev)</webMaster><copyright>© Viktor Chukhantsev</copyright><lastBuildDate>Tue, 22 Oct 2019 02:51:33 +0700</lastBuildDate><atom:link href="https://viktor.dev/en/categories/ruby/" rel="self" type="application/rss+xml"/><item><title>Move Sidekiq jobs</title><link>https://viktor.dev/en/2019-10-22-move-sidekiq-jobs/</link><pubDate>Tue, 22 Oct 2019 02:51:33 +0700</pubDate><author>email@viktor.dev (Viktor Chukhantsev)</author><guid>https://viktor.dev/en/2019-10-22-move-sidekiq-jobs/</guid><description><![CDATA[<p>I was looking for a way to move jobs from one high priority queue to another less prioritized in Sidekiq.</p>
<p>There is nothing built into Sidekiq to complete this, but obviously, you can just use Redis commands to do it.</p>
<p>Here is code snippet to do that.</p>
<div class="code-block code-line-numbers" style="counter-reset: code-block 0">
    <div class="code-header language-ruby">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="n">from_queue_name</span> <span class="o">=</span> <span class="s1">&#39;default&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">to_queue_name</span> <span class="o">=</span> <span class="s1">&#39;low&#39;</span>
</span></span><span class="line"><span class="cl"><span class="n">count_block</span> <span class="o">=</span> <span class="nb">proc</span> <span class="p">{</span> <span class="no">Sidekiq</span><span class="o">.</span><span class="n">redis</span> <span class="k">do</span> <span class="o">|</span><span class="n">conn</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">  <span class="n">conn</span><span class="o">.</span><span class="n">llen</span><span class="p">(</span><span class="s2">&#34;queue:</span><span class="si">#{</span><span class="n">from_queue_name</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">while</span> <span class="n">count_block</span><span class="o">.</span><span class="n">call</span> <span class="o">&gt;</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">  <span class="no">Sidekiq</span><span class="o">.</span><span class="n">redis</span> <span class="k">do</span> <span class="o">|</span><span class="n">conn</span><span class="o">|</span>
</span></span><span class="line"><span class="cl">    <span class="n">conn</span><span class="o">.</span><span class="n">rpoplpush</span> <span class="s2">&#34;queue:</span><span class="si">#{</span><span class="n">from_queue_name</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">,</span> <span class="s2">&#34;queue:</span><span class="si">#{</span><span class="n">to_queue_name</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">end</span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div>
<p>This code snippet will move all the items from one queue to another until there are no more jobs.</p>]]></description></item><item><title>Ruby on Rails Engine vs Mountable App</title><link>https://viktor.dev/en/2019-07-26-ruby-on-rails-enginve-vs-mountable-app/</link><pubDate>Fri, 26 Jul 2019 03:03:33 +0700</pubDate><author>email@viktor.dev (Viktor Chukhantsev)</author><guid>https://viktor.dev/en/2019-07-26-ruby-on-rails-enginve-vs-mountable-app/</guid><description><![CDATA[<h1 id="full-engine">Full Engine</h1>
<p>With a full engine, the parent application inherits the routes from the engine. It is not necessary to specify anything in <strong>parent_app/config/routes.rb</strong>. Specifying the gem in <strong>Gemfile</strong> is enough for the parent app to inherit the models, routes etc. The engine routes are specified as:</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-ruby">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="c1"># new_engine/config/routes.rb </span>
</span></span><span class="line"><span class="cl"><span class="no">Rails</span><span class="o">.</span><span class="n">application</span><span class="o">.</span><span class="n">routes</span><span class="o">.</span><span class="n">draw</span> <span class="k">do</span> 
</span></span><span class="line"><span class="cl">  <span class="c1"># whatever </span>
</span></span><span class="line"><span class="cl"><span class="k">end</span></span></span></code></pre></div></div>
<p><em>No namespacing of models, controllers, etc. These are immediately accessible to the parent application.</em></p>]]></description></item><item><title>Split Ruby on Rails routes into multiple smaller files</title><link>https://viktor.dev/en/2019-07-26-split-ruby-on-rails-routes/</link><pubDate>Fri, 26 Jul 2019 02:51:33 +0700</pubDate><author>email@viktor.dev (Viktor Chukhantsev)</author><guid>https://viktor.dev/en/2019-07-26-split-ruby-on-rails-routes/</guid><description><![CDATA[<p>One time I faced fact that my application is big enough and <strong>routes.rb</strong> look like a mess. I’ve managed that this way.</p>
<p>I added routes directory to application config directory and added it in <strong>autoload_paths</strong> to ensure that routes are reloaded when these files change.</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-ruby">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="c1"># config/application.rb</span>
</span></span><span class="line"><span class="cl"><span class="n">config</span><span class="o">.</span><span class="n">autoload_paths</span> <span class="o">&lt;&lt;</span> <span class="no">Rails</span><span class="o">.</span><span class="n">root</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">&#39;config/routes&#39;</span><span class="p">)</span></span></span></code></pre></div></div>
<p>Then moved necessary routes to small files like this.</p>]]></description></item><item><title>Clear Sidekiq queues</title><link>https://viktor.dev/en/2019-07-26-clear-sidekiq-queues/</link><pubDate>Fri, 26 Jul 2019 01:03:33 +0700</pubDate><author>email@viktor.dev (Viktor Chukhantsev)</author><guid>https://viktor.dev/en/2019-07-26-clear-sidekiq-queues/</guid><description><![CDATA[<p>Sidekiq is mostly used for moving long-running jobs into a background process. It uses Redis to manage its job queue. We often need to clear this queue of jobs to start afresh.</p>
<p>To clear the queue of jobs, I ran the following commands as listed in Sidekiq wiki.</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-ruby">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="Copy to clipboard"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-ruby" data-lang="ruby"><span class="line"><span class="cl"><span class="no">Sidekiq</span><span class="o">::</span><span class="no">ScheduledSet</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">clear</span>
</span></span><span class="line"><span class="cl"><span class="no">Sidekiq</span><span class="o">::</span><span class="no">RetrySet</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">clear</span></span></span></code></pre></div></div>
<p>Sometimes, these commands would clear the queue. Other times, you would need to clear the queue from Redis itself.</p>]]></description></item></channel></rss>