Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Cheap ruby block templating
Bindings on caller
Initial script execution very slow and skewing results
suppress ERB newlines
Keeping the database clean
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Shortest regular expression for matching a subdomain.
Arrays, loops, strings...
Cheap ruby block templating
Check type is XML Serializable
Bindings on caller
Apache log file sorting
Tab-Switching in jQuery
Pastable version of
Rails migration conflict repair
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36</pre> <pre class="sunburst">namespace <span style="color:#3387CC;"><span style="color:#3387CC;">:</span>migrations</span> <span style="color:#E28964;">do</span> desc <span style="color:#65B042;"><span style="color:#65B042;">'</span>reverts, renames and re-executes uncommitted migrations that conflict with already committed migrations<span style="color:#65B042;">'</span></span> task <span style="color:#3387CC;"><span style="color:#3387CC;">:</span>repair</span> => <span style="color:#3387CC;"><span style="color:#3387CC;">:</span>environment</span> <span style="color:#E28964;">do</span> uncommitted <span style="color:#E28964;">=</span> <span style="color:#65B042;"><span style="color:#65B042;">`</span>svn status<span style="color:#65B042;">`</span></span>.<span style="color:#89BDFF;">select</span> {|<span style="color:#3E87E3;">line</span>| line <span style="color:#E28964;">=~</span> <span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;">db<span style="color:#CF7D34;">\/</span>migrate<span style="color:#CF7D34;">\/</span></span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>}.<span style="color:#89BDFF;">collect</span> {|<span style="color:#3E87E3;">line</span>| line.<span style="color:#89BDFF;">match</span>(<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;"> db<span style="color:#CF7D34;">\/</span>migrate<span style="color:#CF7D34;">\/</span><span style="color:#E9C062;"><span style="color:#E9C062;">(</span>.*rb<span style="color:#E9C062;">)</span></span></span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>)[<span style="color:#3387CC;">1</span>]} committed <span style="color:#E28964;">=</span> <span style="color:#9B859D;">Dir</span>.<span style="color:#89BDFF;">glob</span>(<span style="color:#65B042;"><span style="color:#65B042;">'</span>db/migrate/*<span style="color:#65B042;">'</span></span>).<span style="color:#89BDFF;">collect</span> {|<span style="color:#3E87E3;">line</span>| line.<span style="color:#89BDFF;">match</span>(<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;">db<span style="color:#CF7D34;">\/</span>migrate<span style="color:#CF7D34;">\/</span><span style="color:#E9C062;"><span style="color:#E9C062;">(</span>.*rb<span style="color:#E9C062;">)</span></span></span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>)[<span style="color:#3387CC;">1</span>]} <span style="color:#E28964;">-</span> uncommitted highest_committed <span style="color:#E28964;">=</span> committed.<span style="color:#89BDFF;">collect</span>(<span style="color:#E28964;">&</span><span style="color:#3387CC;"><span style="color:#3387CC;">:</span>to_i</span>).<span style="color:#89BDFF;">max</span> lowest_uncommitted <span style="color:#E28964;">=</span> uncommitted.<span style="color:#89BDFF;">collect</span>(<span style="color:#E28964;">&</span><span style="color:#3387CC;"><span style="color:#3387CC;">:</span>to_i</span>).<span style="color:#89BDFF;">min</span> schema_version <span style="color:#E28964;">=</span> <span style="color:#9B859D;">ActiveRecord</span>::<span style="color:#89BDFF;">Base</span>.<span style="color:#89BDFF;">connection</span>.<span style="color:#89BDFF;">select_one</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>select version from schema_info<span style="color:#65B042;">"</span></span>)[<span style="color:#65B042;"><span style="color:#65B042;">"</span>version<span style="color:#65B042;">"</span></span>].<span style="color:#89BDFF;">to_i</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> revert uncommitted migrations</span> uncommitted.<span style="color:#89BDFF;">sort_by</span>(<span style="color:#E28964;">&</span><span style="color:#3387CC;"><span style="color:#3387CC;">:</span>to_i</span>).<span style="color:#89BDFF;">reverse</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">migration</span>| version <span style="color:#E28964;">=</span> migration.<span style="color:#89BDFF;">to_i</span> <span style="color:#E28964;">if</span> version <span style="color:#E28964;"><=</span> schema_version name <span style="color:#E28964;">=</span> migration.<span style="color:#89BDFF;">match</span>(<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;"><span style="color:#E9C062;"><span style="color:#E9C062;">(</span><span style="color:#CF7D34;">\d</span>*_.*<span style="color:#E9C062;">)</span></span>.rb</span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>)[<span style="color:#3387CC;">1</span>] class_name <span style="color:#E28964;">=</span> (<span style="color:#E28964;">require</span> <span style="color:#65B042;"><span style="color:#65B042;">'</span>db/migrate/<span style="color:#65B042;">'</span></span> <span style="color:#E28964;">+</span> name)[<span style="color:#3387CC;">0</span>] puts class_name.<span style="color:#89BDFF;">constantize</span>.<span style="color:#89BDFF;">down</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span>set it back to the version prior to all the uncommitted migrations - this doesn't get done automatically by calling down</span> <span style="color:#9B859D;">ActiveRecord</span>::<span style="color:#89BDFF;">Base</span>.<span style="color:#89BDFF;">connection</span>.<span style="color:#89BDFF;">execute</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span>update schema_info set version=<span style="color:#DAEFA3;"><span style="color:#DAEFA3;">#{</span>schema_version<span style="color:#E28964;">-</span><span style="color:#DDF2A4;">1</span><span style="color:#DAEFA3;">}</span></span><span style="color:#65B042;">"</span></span>) version_offset <span style="color:#E28964;">=</span> (highest_committed <span style="color:#E28964;">-</span> lowest_uncommitted) <span style="color:#E28964;">+</span> <span style="color:#3387CC;">1</span> uncommitted.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">old_name</span>| version <span style="color:#E28964;">=</span> old_name.<span style="color:#89BDFF;">to_i</span> <span style="color:#E28964;">+</span> version_offset new_name <span style="color:#E28964;">=</span> version.<span style="color:#89BDFF;">to_s</span>.<span style="color:#89BDFF;">rjust</span>(<span style="color:#3387CC;">3</span>,<span style="color:#65B042;"><span style="color:#65B042;">'</span>0<span style="color:#65B042;">'</span></span>) <span style="color:#E28964;">+</span> old_name.<span style="color:#89BDFF;">gsub</span>(<span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span><span style="color:#E9C062;"><span style="color:#CF7D34;">\d</span></span><span style="color:#E9C062;"><span style="color:#E9C062;">/</span></span>, <span style="color:#65B042;"><span style="color:#65B042;">'</span><span style="color:#65B042;">'</span></span>) <span style="color:#65B042;"><span style="color:#65B042;">`</span>mv db/migrate/<span style="color:#65B042;"><span style="color:#65B042;">#{</span>old_name<span style="color:#65B042;">}</span></span> db/migrate/<span style="color:#65B042;"><span style="color:#65B042;">#{</span>new_name<span style="color:#65B042;">}</span></span><span style="color:#65B042;">`</span></span> <span style="color:#E28964;">end</span> puts <span style="color:#65B042;"><span style="color:#65B042;">"</span>Uncommited migrations have been reversed and renamed. You can now migrate.<span style="color:#65B042;">"</span></span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> </pre> </div> </div> <a href="http://refactormycode.com/codes/112-rails-migration-conflict-repair" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>