knex/docs/lib/cli/migrate.html
2013-12-12 17:37:44 -05:00

113 lines
20 KiB
HTML

<!DOCTYPE html><html lang="en"><head><title>lib/cli/migrate</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content="../../"><meta name="groc-document-path" content="lib/cli/migrate"><meta name="groc-project-path" content="lib/cli/migrate.js"><link rel="stylesheet" type="text/css" media="all" href="../../assets/style.css"><script type="text/javascript" src="../../assets/behavior.js"></script><body><div id="meta"><div class="file-path">lib/cli/migrate.js</div></div><div id="document"><div class="segment"><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Promise</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;../promise&#39;</span><span class="p">).</span><span class="nx">Promise</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">colors</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;colors&#39;</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;path&#39;</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;lodash&#39;</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">fs</span> <span class="o">=</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">promisifyAll</span><span class="p">(</span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;fs&#39;</span><span class="p">));</span>
<span class="kd">var</span> <span class="nx">Knex</span><span class="p">,</span> <span class="nx">knex</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The CLI options for running migrations</p></div></div><div class="code"><div class="wrapper"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">commands</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Did you mean migrate:latest?&#39;</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:latest&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">latest</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
<span class="p">})</span>
<span class="p">.</span><span class="nx">spread</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">batchNo</span><span class="p">,</span> <span class="nx">log</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Already up to date&#39;</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">&#39;Batch &#39;</span> <span class="o">+</span> <span class="nx">batchNo</span> <span class="o">+</span> <span class="s1">&#39; run: &#39;</span> <span class="o">+</span> <span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s1">&#39; migrations \n&#39;</span><span class="p">).</span><span class="nx">green</span> <span class="o">+</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">).</span><span class="nx">cyan</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">})</span>
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:latest&#39;</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">&#39;runs migrations that have not run yet&#39;</span><span class="p">;</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:make&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">name</span> <span class="o">=</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">_</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">name</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span> <span class="k">return</span> <span class="nx">err</span><span class="p">(</span><span class="s1">&#39;The name must be defined&#39;</span><span class="p">);</span>
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">make</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">config</span><span class="p">);</span>
<span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">filename</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">&#39;Migration &#39;</span> <span class="o">+</span> <span class="nx">filename</span> <span class="o">+</span> <span class="s1">&#39; created!&#39;</span><span class="p">).</span><span class="nx">green</span><span class="p">);</span>
<span class="p">})</span>
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:make&#39;</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">&#39;generates a new migration&#39;</span><span class="p">;</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:rollback&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">rollback</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
<span class="p">})</span>
<span class="p">.</span><span class="nx">spread</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">batchNo</span><span class="p">,</span> <span class="nx">log</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Already at the base migration&#39;</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">&#39;Batch &#39;</span> <span class="o">+</span> <span class="nx">batchNo</span> <span class="o">+</span> <span class="s1">&#39; rolled back: &#39;</span> <span class="o">+</span> <span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s1">&#39; migrations \n&#39;</span><span class="p">).</span><span class="nx">green</span> <span class="o">+</span>
<span class="nx">log</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">&#39;\n&#39;</span><span class="p">).</span><span class="nx">cyan</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">})</span>
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
<span class="p">};</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:rollback&#39;</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">&#39;rolls back the latest migration group&#39;</span><span class="p">;</span>
<span class="nx">commands</span><span class="p">[</span><span class="s1">&#39;migrate:currentVersion&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">currentVersion</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
<span class="p">})</span>
<span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">version</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;Current Version: &#39;</span><span class="p">.</span><span class="nx">green</span> <span class="o">+</span> <span class="nx">version</span><span class="p">.</span><span class="nx">blue</span><span class="p">);</span>
<span class="p">})</span>
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">checkConfig</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">configFile</span> <span class="o">=</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">c</span> <span class="o">||</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">config</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">configFile</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">configFile</span> <span class="o">=</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">process</span><span class="p">.</span><span class="nx">cwd</span><span class="p">(),</span> <span class="s1">&#39;config.js&#39;</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">statAsync</span><span class="p">(</span><span class="nx">configFile</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">configFile</span><span class="p">));</span>
<span class="p">}).</span><span class="nx">tap</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span> <span class="o">||</span> <span class="nx">process</span><span class="p">.</span><span class="nx">cwd</span><span class="p">();</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Try to use the Knex install local to the current project, so that we're
resolving to the locally installed database driver.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">Knex</span><span class="p">)</span> <span class="p">{</span>
<span class="k">try</span> <span class="p">{</span>
<span class="nx">Knex</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span><span class="p">,</span> <span class="s1">&#39;node_modules/knex&#39;</span><span class="p">));</span>
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">Knex</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;../../knex&#39;</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">.</span><span class="nx">client</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">.</span><span class="nx">client</span> <span class="k">instanceof</span> <span class="nx">Knex</span><span class="p">.</span><span class="nx">ClientBase</span><span class="p">))</span> <span class="p">{</span>
<span class="nx">knex</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nx">knex</span> <span class="o">=</span> <span class="nx">Knex</span><span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">});</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">logError</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">.</span><span class="nx">stack</span><span class="p">);</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">err</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">msg</span><span class="p">.</span><span class="nx">red</span><span class="p">);</span>
<span class="p">};</span>
<span class="kd">var</span> <span class="nx">exit</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">knex</span> <span class="o">&amp;&amp;</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">knex</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">pool</span><span class="p">.</span><span class="nx">destroy</span><span class="p">();</span>
<span class="p">}</span>
<span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">();</span>
<span class="p">};</span></div></div></div></div></body></html>