Nick Sieger: JRuby on Rails: Integration Plugin Goes 1.0 http://blog.nicksieger.com/articles/2007/03/16/jruby-on-rails-integration-plugin-goes-1-0 en-us 40 "JRuby on Rails: Integration Plugin Goes 1.0" by Nick <p>Point taken. Although there is similar ugly code in db:structure:dump and db:test:purge, the last of which is in the standard task sequence when running tests.</p> <p>My guess is that stuff is a hold-over from pre-migrations Rails that will hopefully be deprecated and axed in the future.</p> Fri, 16 Mar 2007 18:26:06 +0000 urn:uuid:8734a11a-2899-4915-85ae-abe2d5f13789 http://blog.nicksieger.com/articles/2007/03/16/jruby-on-rails-integration-plugin-goes-1-0#comment-230 "JRuby on Rails: Integration Plugin Goes 1.0" by atmos <p>Note that most people never execute that code since they use the pure ruby schema, they use the :clone task. </p> <p>The task, fugly as it is, does have its place if people are working on dbs with procedures, triggers, or custom sequences. While you&#8217;d hope this stuff would be in the migrations, I have a feeling that people add that sorta stuff manually because rails doesn&#8217;t give them an easy way to do it(beyond execute).</p> Fri, 16 Mar 2007 17:52:38 +0000 urn:uuid:41dae2fc-e0de-4ab8-9f2a-dd0968f3d9b0 http://blog.nicksieger.com/articles/2007/03/16/jruby-on-rails-integration-plugin-goes-1-0#comment-229 JRuby on Rails: Integration Plugin Goes 1.0 <p>On the heels of my last post, Robert <a href="http://rubyforge.org/pipermail/jruby-extras-devel/2007-March/000432.html">announced the 1.0 release of Rails Integration</a>, the bits that allow JRuby on Rails to be run out of a Java web archive (war). If you have any interest at all in trying out JRuby on Rails, do yourself a favor and <a href="http://www.headius.com/jrubywiki/index.php/Rails_Integration">try out the integration bits</a>. Even though this is 1.0, we&#8217;re still moving rapidly and would appreciate any and all feedback. (And Robert is doing his best to keep up with changes in core.)</p> <p>Related to this, Stuart Halloway <a href="http://www.relevancellc.com/2007/3/14/the-j-plugin-existing-rails-apps-on-jruby">recently announced his J plugin</a> which is a drop-in collection of Rake tasks that bridge the inherent differences between Rails running on C Ruby vs. JRuby. We still have some work to do in some areas, such as database driver configuration, test database bootstrapping and launching unit tests. For example, instead of the <a href="http://dev.rubyonrails.org/svn/rails/branches/1-2-stable/railties/lib/tasks/databases.rake">big, ugly, database-specific case statement that&#8217;s in Rails&#8217; databases.rake today</a>:</p> <div class="typocode"><pre><code class="typocode_ruby "><span class="ident">desc</span> <span class="punct">&quot;</span><span class="string">Recreate the test databases from the development structure</span><span class="punct">&quot;</span> <span class="ident">task</span> <span class="symbol">:clone_structure</span> <span class="punct">=&gt;</span> <span class="punct">[</span> <span class="punct">&quot;</span><span class="string">db:structure:dump</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">db:test:purge</span><span class="punct">&quot;</span> <span class="punct">]</span> <span class="keyword">do</span> <span class="ident">abcs</span> <span class="punct">=</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">configurations</span> <span class="keyword">case</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">adapter</span><span class="punct">&quot;]</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">mysql</span><span class="punct">&quot;</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">establish_connection</span><span class="punct">(</span><span class="symbol">:test</span><span class="punct">)</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">connection</span><span class="punct">.</span><span class="ident">execute</span><span class="punct">('</span><span class="string">SET foreign_key_checks = 0</span><span class="punct">')</span> <span class="constant">IO</span><span class="punct">.</span><span class="ident">readlines</span><span class="punct">(&quot;</span><span class="string">db/<span class="expr">#{RAILS_ENV}</span>_structure.sql</span><span class="punct">&quot;).</span><span class="ident">join</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(&quot;</span><span class="string"> </span><span class="punct">&quot;).</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">table</span><span class="punct">|</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">connection</span><span class="punct">.</span><span class="ident">execute</span><span class="punct">(</span><span class="ident">table</span><span class="punct">)</span> <span class="keyword">end</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">postgresql</span><span class="punct">&quot;</span> <span class="constant">ENV</span><span class="punct">['</span><span class="string">PGHOST</span><span class="punct">']</span> <span class="punct">=</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">host</span><span class="punct">&quot;]</span> <span class="keyword">if</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">host</span><span class="punct">&quot;]</span> <span class="constant">ENV</span><span class="punct">['</span><span class="string">PGPORT</span><span class="punct">']</span> <span class="punct">=</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">port</span><span class="punct">&quot;].</span><span class="ident">to_s</span> <span class="keyword">if</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">port</span><span class="punct">&quot;]</span> <span class="constant">ENV</span><span class="punct">['</span><span class="string">PGPASSWORD</span><span class="punct">']</span> <span class="punct">=</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">password</span><span class="punct">&quot;].</span><span class="ident">to_s</span> <span class="keyword">if</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">password</span><span class="punct">&quot;]</span> `<span class="ident">psql</span> <span class="punct">-</span><span class="constant">U</span> <span class="punct">&quot;</span><span class="string"><span class="expr">#{abcs[&quot;test&quot;][&quot;username&quot;]}</span></span><span class="punct">&quot;</span> <span class="punct">-</span><span class="ident">f</span> <span class="ident">db</span><span class="punct">/</span><span class="comment">#{RAILS_ENV}_structure.sql #{abcs[&quot;test&quot;][&quot;database&quot;]}`</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">sqlite</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">sqlite3</span><span class="punct">&quot;</span> <span class="ident">dbfile</span> <span class="punct">=</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">database</span><span class="punct">&quot;]</span> <span class="punct">||</span> <span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;][&quot;</span><span class="string">dbfile</span><span class="punct">&quot;]</span> `<span class="comment">#{abcs[&quot;test&quot;][&quot;adapter&quot;]} #{dbfile} &lt; db/#{RAILS_ENV}_structure.sql`</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">sqlserver</span><span class="punct">&quot;</span> `<span class="ident">osql</span> <span class="punct">-</span><span class="constant">E</span> <span class="punct">-</span><span class="constant">S</span> <span class="comment">#{abcs[&quot;test&quot;][&quot;host&quot;]} -d #{abcs[&quot;test&quot;][&quot;database&quot;]} -i db\#{RAILS_ENV}_structure.sql`</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">oci</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">oracle</span><span class="punct">&quot;</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">establish_connection</span><span class="punct">(</span><span class="symbol">:test</span><span class="punct">)</span> <span class="constant">IO</span><span class="punct">.</span><span class="ident">readlines</span><span class="punct">(&quot;</span><span class="string">db/<span class="expr">#{RAILS_ENV}</span>_structure.sql</span><span class="punct">&quot;).</span><span class="ident">join</span><span class="punct">.</span><span class="ident">split</span><span class="punct">(&quot;</span><span class="string">; </span><span class="punct">&quot;).</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">ddl</span><span class="punct">|</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">connection</span><span class="punct">.</span><span class="ident">execute</span><span class="punct">(</span><span class="ident">ddl</span><span class="punct">)</span> <span class="keyword">end</span> <span class="keyword">when</span> <span class="punct">&quot;</span><span class="string">firebird</span><span class="punct">&quot;</span> <span class="ident">set_firebird_env</span><span class="punct">(</span><span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;])</span> <span class="ident">db_string</span> <span class="punct">=</span> <span class="ident">firebird_db_string</span><span class="punct">(</span><span class="ident">abcs</span><span class="punct">[&quot;</span><span class="string">test</span><span class="punct">&quot;])</span> <span class="ident">sh</span> <span class="punct">&quot;</span><span class="string">isql -i db/<span class="expr">#{RAILS_ENV}</span>_structure.sql <span class="expr">#{db_string}</span></span><span class="punct">&quot;</span> <span class="keyword">else</span> <span class="keyword">raise</span> <span class="punct">&quot;</span><span class="string">Task not supported by '<span class="expr">#{abcs[&quot;test&quot;][&quot;adapter&quot;]}</span>'</span><span class="punct">&quot;</span> <span class="keyword">end</span> <span class="keyword">end</span></code></pre></div> <p>we can use migrations to create the test database:</p> <div class="typocode"><pre><code class="typocode_ruby "><span class="ident">desc</span> <span class="punct">&quot;</span><span class="string">Recreate the test databases from migrations</span><span class="punct">&quot;</span> <span class="ident">task</span> <span class="symbol">:migrate_test_db</span> <span class="keyword">do</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">establish_connection</span><span class="punct">(</span><span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Base</span><span class="punct">.</span><span class="ident">configurations</span><span class="punct">['</span><span class="string">test</span><span class="punct">'])</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Schema</span><span class="punct">.</span><span class="ident">verbose</span> <span class="punct">=</span> <span class="ident">t</span><span class="punct">.</span><span class="ident">application</span><span class="punct">.</span><span class="ident">options</span><span class="punct">.</span><span class="ident">trace</span> <span class="constant">ActiveRecord</span><span class="punct">::</span><span class="constant">Migrator</span><span class="punct">.</span><span class="ident">migrate</span><span class="punct">(&quot;</span><span class="string">db/migrate/</span><span class="punct">&quot;)</span> <span class="keyword">end</span></code></pre></div> <p>Over time, I hope to see all these efforts coalesce and make the Rails developer experience virtually identical on either interpreter. What would be most excellent is to eventually push some of these improvements back to the Rails core.</p> Fri, 16 Mar 2007 16:55:00 +0000 urn:uuid:9fe84534-3a40-40e8-8626-a15bb05d74b4 Nick Sieger http://blog.nicksieger.com/articles/2007/03/16/jruby-on-rails-integration-plugin-goes-1-0 jruby rails http://blog.nicksieger.com/articles/trackback/228