Rails/JRuby WAR deployment and Migrations

74 views
Skip to first unread message

MichaelF

unread,
Nov 26, 2009, 1:36:58 PM11/26/09
to Ruby on Rails: Talk
I have been tinkering with RoR and JRuby for about a year to create
simple internal applications. I am working on my first "real"
application that will be deployed for use on the internet and have
some questions on proper deployment using RoR (2.2.2), JRuby (1.4) and
MySQL (5.0.x).

(I will be deploying everything to a hosted Tomcat/MySQL environment)

I can easily enough use Warbler to create a WAR file and deploy that
to Tomcat. I also setup a MySQL server on the hosting machine as the
app is configured to use MySQL.

The part that is causing me heartburn is getting the DB schema up to
the hosting site. As a workaround for the initial release I simply
used mysqldump to export the entire schema and base data. I then used
the mysql command interface to load the sqldump into the server. This
works well enough for now, but what is the "right" way to deploy the
database schema and migration updates over time?

While the app is in use over the next 3 months I will be building the
"admin/reporting" interface to it so I suspect I will need to modify
the schema in some way long after the app is in use and loaded with
real data.

I appreciate your time and assistance with this question!

--Michael

Conrad Taylor

unread,
Nov 26, 2009, 2:33:30 PM11/26/09
to rubyonra...@googlegroups.com


Sent from my iPhone
Michael, why don't you simply use the glassfish gem for deployment?
In any cade, if you're trying to update the schema on the production
machine, the you can simply do the following:

rake db:migrate RAILS_ENV=production

Good luck

-Conrad

>
> --
>
> You received this message because you are subscribed to the Google
> Groups "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails-
> ta...@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com
> .
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en
> .
>
>

MichaelF

unread,
Nov 26, 2009, 9:27:34 PM11/26/09
to Ruby on Rails: Talk
Conrad -

Forgive me if this is a stupid question (this is my first attempt at
deploying a WAR from RoR)...


How can I run a rake command on the Tomcat server? All that is on
there is Java / Tomcat / MySQL. Do I have access to rake somehow
through the WAR that is deployed? I know the JRuby JAR is in that WAR
but was not aware I could run rake tasks that way.

On Nov 26, 12:33 pm, Conrad Taylor <conra...@gmail.com> wrote:
> Sent from my iPhone
>

Glen

unread,
Nov 26, 2009, 10:43:51 PM11/26/09
to Ruby on Rails: Talk
Hi,

I have similar set up as yours. My production Linux server has plain
Glassfish & MySQL, and no JRuby is installed (it is packed in WAR
file). I ended up with running migration on my development computer.
In my database.yml , I put the address of my production server. My
production server is located in private network for security purposes,
so I am using SSH tunneling to access from outside.

Glen

Hassan Schroeder

unread,
Nov 26, 2009, 11:44:37 PM11/26/09
to rubyonra...@googlegroups.com
On Thu, Nov 26, 2009 at 11:33 AM, Conrad Taylor <conr...@gmail.com> wrote:

> Michael, why don't you simply use the glassfish gem for deployment?

It's not always suitable, especially if you have an existing Tomcat
installation with other non-JRuby apps.

> In any cade, if you're trying to update the schema on the production
> machine, the you can simply do the following:
>
> rake db:migrate RAILS_ENV=production

No, you can't; that's the whole point -- none of those rake tasks are
packaged with the WAR file.

The legacy app I inherited uses Capistrano to check out and deploy
a JRuby app in standard Rails format, which is useful for running
migrations, scripts via cron jobs, etc., and then builds and deploys
the WAR file from there.

It seems a little redundant, but it works :-)

FWIW,
--
Hassan Schroeder ------------------------ hassan.s...@gmail.com
twitter: @hassan

Liu Lantao

unread,
Dec 1, 2009, 9:11:46 AM12/1/09
to rubyonra...@googlegroups.com
rake db:schema:load instead of rake db:migrate in your production server.

--

You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.

To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.





--
Liu Lantao
College of Information Science and Technology, Beijing Normal University
EMAIL: liulantao ( at ) gmail ( dot ) com ;
WEBSITE: http://www.liulantao.com/ .
------

Nick Sieger

unread,
Dec 2, 2009, 11:35:56 AM12/2/09
to rubyonra...@googlegroups.com
You can have warbler include your db/ directory as well as your
Rakefile in the war. Then, on the server, unpack the war file
somewhere and run rake as follows inside the WEB-INF directory:

java -jar lib/jruby-complete-X.Y.jar -S rake db:migrate RAILS_ENV=production

Some folks have gone so far as to have a custom servlet context
listener run db:migrate inside the app server once the app is
deployed, but that always seemed a little dodgy to me...

/Nick

>
> --Michael

straig...@gmail.com

unread,
Dec 6, 2009, 9:21:00 AM12/6/09
to rubyonra...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages