Custom Colorized Environment String in Rails Console
<p>Ever opened a Rails console and wondered “wait, which environment am I in again?” Yeah, me too. Especially when you’re switching between development, staging, and production faster than you can say <code>User.destroy_all</code>.</p>
<p>Here’s a neat trick to add some color to your console prompt so you never have to wonder again.</p>
<h2>The Problem</h2>
<p>The default Rails console visual feedback stops being useful because staging environments are usually configured as “production” on Heroku and most deployment platforms. So <code>Rails.env.production?</code> returns true for both staging and production. Fun times!</p>
<h2>The Solution</h2>
<p>Drop this into <code>config/initializers/console.rb</code>:</p>
<div class="highlight"><pre class="highlight ruby"><code><span class="c1"># frozen_string_literal: true</span>
<span class="nb">require</span> <span class="s2">"rails/commands/console/irb_console"</span>
<span class="k">module</span> <span class="nn">IRBConsoleWithDeployEnv</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
<span class="k">super</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
<span class="vi">@deploy_env</span> <span class="o">=</span> <span class="n">env</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">colorized_env</span>
<span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">const_set</span><span class="p">(</span><span class="ss">:DIM</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">unless</span> <span class="k">defined?</span><span class="p">(</span><span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="o">::</span><span class="no">DIM</span><span class="p">)</span>
<span class="k">return</span> <span class="k">super</span> <span class="k">unless</span> <span class="vi">@deploy_env</span>
<span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">colorize</span><span class="p">(</span><span class="s2">"live:"</span><span class="p">,</span> <span class="p">[</span><span class="ss">:DIM</span><span class="p">])</span> <span class="o">+</span>
<span class="k">case</span> <span class="vi">@deploy_env</span>
<span class="k">when</span> <span class="s2">"staging"</span>
<span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">colorize</span><span class="p">(</span><span class="s2">"stag"</span><span class="p">,</span> <span class="p">[</span><span class="ss">:YELLOW</span><span class="p">])</span>
<span class="k">when</span> <span class="s2">"production"</span>
<span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">colorize</span><span class="p">(</span><span class="s2">"prod"</span><span class="p">,</span> <span class="p">[</span><span class="ss">:RED</span><span class="p">])</span>
<span class="k">else</span>
<span class="no">IRB</span><span class="o">::</span><span class="no">Color</span><span class="p">.</span><span class="nf">colorize</span><span class="p">(</span><span class="vi">@deploy_env</span><span class="p">,</span> <span class="p">[</span><span class="ss">:BLUE</span><span class="p">])</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Rails</span><span class="o">::</span><span class="no">Console</span><span class="o">::</span><span class="no">IRBConsole</span><span class="p">.</span><span class="nf">prepend</span> <span class="nb">self</span>
<span class="k">end</span>
</code></pre></div>
<p>And this into <code>config/application.rb</code>:</p>
<div class="highlight"><pre class="highlight ruby"><code><span class="k">module</span> <span class="nn">MyApp</span>
<span class="k">class</span> <span class="nc">Application</span> <span class="o"><</span> <span class="no">Rails</span><span class="o">::</span><span class="no">Application</span>
<span class="c1"># Other configurations...</span>
<span class="n">console</span> <span class="k">do</span> <span class="o">|</span><span class="n">app</span><span class="o">|</span>
<span class="n">config</span><span class="p">.</span><span class="nf">console</span> <span class="o">=</span> <span class="no">Rails</span><span class="o">::</span><span class="no">Console</span><span class="o">::</span><span class="no">IRBConsole</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"DEPLOY_ENV"</span><span class="p">])</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre></div>
<p>Now your console prompt will show a nice colorized environment string prefixed by your app name. No more “oops, wrong environment” moments.</p>