Forum: Ruby on Rails Deployment Question

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
JannaB (Guest)
on 2009-06-05 01:17
(Received via mailing list)
Passenger is not available for windows. However, it seems for a simple
deployment configuration, under windows, I can just simply put the
virtual hosts section into http.conf, e.g.:

<VirtualHost *>
    ServerName mysite
    DocumentRoot C:/InstantRails/rails_apps/mysite
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000
</VirtualHost>

add a line into my windows hosts file:

127.0.0.1       mysite

fire up apache, fire up mongrel with:

ruby script/server -e production -p 3000

and away I go. Am I wrong? Isn't this about the simplest and easiest
means of deployment? -Janna
Marnen L. (Guest)
on 2009-06-05 01:40
JannaB wrote:
> Passenger is not available for windows. However, it seems for a simple
> deployment configuration, under windows, I can just simply put the
> virtual hosts section into http.conf, e.g.:
>
> <VirtualHost *>
>     ServerName mysite
>     DocumentRoot C:/InstantRails/rails_apps/mysite
>     ProxyPass / http://localhost:3000/
>     ProxyPassReverse / http://localhost:3000
> </VirtualHost>
>
> add a line into my windows hosts file:
>
> 127.0.0.1       mysite
>
> fire up apache, fire up mongrel with:
>
> ruby script/server -e production -p 3000
>
> and away I go. Am I wrong? Isn't this about the simplest and easiest
> means of deployment? -Janna

Yes, you can do this -- it's more or less what everyone did before
Passenger came along; Passenger just automates it.  However, you'll want
multiple Mongrel processes if you're doing anything remotely close to
production use, and at that point Windows is no longer an appropriate
choice for other reasons anyway (such as security).  I think you'd be
better advised to deploy on *nix of some sort (perhaps in a VM?), so the
point is kind of moot.

Best,
--
Marnen Laibow-Koser
http://www.marnen.org
removed_email_address@domain.invalid
Conrad T. (Guest)
on 2009-06-05 01:41
(Received via mailing list)
On Thu, Jun 4, 2009 at 2:16 PM, JannaB <removed_email_address@domain.invalid>
wrote:

> </VirtualHost>
> means of deployment? -Janna
Janna, I'm thinking that this will work to a certain point before you
decide
to
use something like a mongrel cluster which has better management for
your
Rails application.  Also, you might be so inclined to port Passenger to
Windows
platform because Apache exists for Windows.

Good luck,

-Conrad
Maurício L. (Guest)
on 2009-06-05 01:44
(Received via mailing list)
On Windows?

Try JRuby, simplest way to get it working and you won't even have
troubles with native gems.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
JannaB (Guest)
on 2009-06-05 02:13
(Received via mailing list)
No way -- have you tried to make a war file with warbler? I am an ex
Java programmer -- and the JRuby java-style of deployment defeats the
purpose of why we all went to Ruby!

On Jun 4, 5:43 pm, Maurício Linhares <removed_email_address@domain.invalid>
Maurício L. (Guest)
on 2009-06-05 02:15
(Received via mailing list)
Who said you need warbler or a war file? Have you searched for the
glassfish gem or jetty-rails?

You'll be amazed how it's easier than dabbling in Apache config,
specially on Windows.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
Conrad T. (Guest)
on 2009-06-05 03:05
(Received via mailing list)
2009/6/4 Maurício Linhares <removed_email_address@domain.invalid>

>
> On Thu, Jun 4, 2009 at 7:13 PM, JannaB <removed_email_address@domain.invalid> wrote:
> >
> > No way -- have you tried to make a war file with warbler? I am an ex
> > Java programmer -- and the JRuby java-style of deployment defeats the
> > purpose of why we all went to Ruby!
> >
>
>
This was what I was able to find in regards to JRuby using Glassfish:

http://download.java.net/javaee5/screencasts/jruby...

In short, it seems to be a very slow process when it comes time to
generate your first Rails application because it needs to import
the required gems into the war file.  However, it seems that it gets
a little faster after future deployments but the war file creation
appears to slow and/or he was working on a very slow machine.

In contrast, Charles Nutter gave a great talk at Railsconf 2009 and
he really showed the speed of JRuby.  Also, he did a demo on the
threading capabilities of JRuby showing true parallel threads whereas
Ruby 1.8.6 (MRI) and Ruby 1.9.1 (YARV) do not have this feature at
this time because of the global interpreter lock (GCL).

-Conrad
JannaB (Guest)
on 2009-06-05 03:42
(Received via mailing list)
It's ALL NONSENSE. I do NOT want to "war" things up. Been there --
done that, left it behind. Things should be able to run out of a
filesystem, without modification, without all kinds of steps.
Otherwise, we're going backwards, Jruby notwithstanding. -Janna
Vivek P. (Guest)
on 2009-06-05 03:49
(Received via mailing list)
Why do you need to go WAR route?

Give glassfish gem a try:

Assuming you have JDK6 and JRuby installed

Install:

$ jruby -S gem install glassfish

To run:

$ cd your-app
$ glassfish


There is no warring here. The gem is about 3.4 MB in size and directly
run
Rails or Rack based frameworks (Merb, Sinatra, Ramaze) by hooking up
HTTP
(grizzly framework) with the framework of your choice.

-vivek
JannaB (Guest)
on 2009-06-05 04:29
(Received via mailing list)
Vivek,

Have you tried this on a system with Sun Application Server on it? I
get:

G:\jruby\rails_apps\myapp>glassfish

G:\jruby\rails_apps\myapp>asadmin start-domain domain1.
Starting Domain domain1., please wait.
Log redirected to G:\Sun\SDK\domains\domain1.\logs\server.log.
Redirecting output to G:/Sun/SDK/domains/domain1/logs/server.log
Domain domain1. is ready to receive client requests. Additional
services are bei
ng started in background.
Domain [domain1.] is running [Sun Java System Application Server
9.1_02 (build b
04-fcs)] with its configuration and logs at: [G:\Sun\SDK\domains].
Admin Console is available at [http://localhost:4848].
Use the same port [4848] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:8080 https://localhost:8181 ].
Following web-contexts are available:
[/web1  /__wstx-services ggripv2 ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://XP1:8686/jmxrmi] for domain management
purposes.
Domain listens on at least following ports for connections:
[8080 8181 4848 3700 3820 3920 8686 ].
Domain does not support application server clusters and other
standalone instanc
es.


G:\jruby\rails_apps\myapp>
Conrad T. (Guest)
on 2009-06-05 04:31
(Received via mailing list)
On Thu, Jun 4, 2009 at 4:48 PM, Vivek P. <removed_email_address@domain.invalid>
wrote:

> To run:
>
>> On Jun 4, 7:05 pm, Conrad T. <removed_email_address@domain.invalid> wrote:
>> > > specially on Windows.
>> > > > Java programmer -- and the JRuby java-style of deployment defeats
>> > a little faster after future deployments but the war file creation
>>
>
Vivek, you might want to create a screencast on how to deploy a Rails
application
using JRuby and Glassfish.  This will be helpful to others that want to
use
JRuby
as well as disprove some of the negative myths attached to it.

-Conrad
Maurício L. (Guest)
on 2009-06-05 04:58
(Received via mailing list)
Have you tried the Glassfish gem before writing so much nonsense?

http://glassfishgem.rubyforge.org/

You could at least read what people are saying before answering.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
JannaB (Guest)
on 2009-06-05 05:56
(Received via mailing list)
This is cool. No repackaging -- and if I am correct, when running in
glassfish (on Windows systems, jruby -S glassfish ) I am running in a
true J2EE application server every bit as powerful as, say JBoss?

On Jun 4, 8:57 pm, Maurício Linhares <removed_email_address@domain.invalid>
Maurício L. (Guest)
on 2009-06-05 06:00
(Received via mailing list)
Not exactly.

The Http connector (which is the really important part) is the same
Grizzly NIO connector that goes inside the full fledged Glassfish, but
this is a lite version with most of the Java EE garbage striped out.
You wouldn't need it anyway in a Rails application, no reason to keep
it.

In Java parlance it's simple servlet container.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
JannaB (Guest)
on 2009-06-05 06:06
(Received via mailing list)
So, in effect, it is more like running under tomcat, without having to
make a war file and all that java-nonsense -- and since I am running
in JRuby, I get the full power  of that.

On Jun 4, 10:00 pm, Maurício Linhares <removed_email_address@domain.invalid>
JannaB (Guest)
on 2009-06-05 06:08
(Received via mailing list)
So...then...how is this different than running jruby under mongrel ?
Maurício L. (Guest)
on 2009-06-05 06:09
(Received via mailing list)
Exactly :)

And you call it just like you'd call a mongrel server. Easiest way to
get up and running with Ruby on Windows if you don't want to struggle
with native gems and natural Ruby slowness on Windows.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
Maurício L. (Guest)
on 2009-06-05 06:16
(Received via mailing list)
The Grizzly connector is a pure Java NIO (means non-blocking) HTTP
connector.

It's faster, more reliable and still under development, while mongrel
doesn't look very active at the moment.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)
Vivek P. (Guest)
on 2009-06-05 06:51
(Received via mailing list)
GlassFish gem and GlassFish application server v2.x are completely two
different things. One has nothing to do with another.

If you are using GlassFish gem then it would run your application as I
described. See the docs here: http://glassfishgem.rubyforge.org/

On the other hand the only way you can run Rails on GlassFish
application
server v2.x is by deploying it as a WAR file.

-vivek.
Vivek P. (Guest)
on 2009-06-05 21:13
(Received via mailing list)
>
> Vivek, you might want to create a screencast on how to deploy a Rails
> application
> using JRuby and Glassfish.  This will be helpful to others that want to use
> JRuby
> as well as disprove some of the negative myths attached to it.
>


There are several articles/blogs/wikis entries that describe running
Rails
on GlassFish server as well as glassfish gem.

To get started see Charles Nutter blog on "Easy deployment with
Glassfish
gem" at:
http://blog.headius.com/2009/04/apache-jruby-rails...

I should have a new screen cast on Deployment of Rails/Merb/Sinatra on
GlassFish gem soon.

-vivek.
Conrad T. (Guest)
on 2009-06-06 01:01
(Received via mailing list)
Vivek, it's all working and the Glassfish gem is very nice indeed:

JRuby 1.3.0RC2
Glassfish Gem 0.9.5
Rails 2.3.2

I say this because I was able to configure glassfish gem with only 2
JRuby
runtimes and I was able to serve 1681.10 pages per sec. BTW, I
configured ab
as follows:

ab -n 1000 -c 100  <my local site>

Very nice work,

-Conrad
JannaB (Guest)
on 2009-06-06 01:44
(Received via mailing list)
What does it mean for something to be  "NIO ( non-blocking) "

Incidentally, is Apache web server, alone by itself, non-blocking?

As for Conrad's most recent comment, it sounds like one incarnation of
Glassfish gem with a couple of JRuby runtimes could likely handle a
fairly good amount of traffic? -Janna
Maurício L. (Guest)
on 2009-06-06 01:49
(Received via mailing list)
If you're using the latest Rails, you don't need a couple of runtimes,
just one runtime and a "config.threadsafe!" in your environment.rb
file will do the trick.

JRuby uses native threads so it will use as many cores as available at
the machine in just one instance of your webapplication.

And about NIO, it's better if you look by yourself, you can start at
the Grizzly connector homepage - https://grizzly.dev.java.net/

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
JannaB (Guest)
on 2009-06-06 01:58
(Received via mailing list)
Thank you guys -- yes, this really looks like the ultimate deployment
situation at the moment. Thanks for all your help! -Janna B

On Jun 5, 9:18 am, Maurício Linhares <removed_email_address@domain.invalid>
JannaB (Guest)
on 2009-06-06 02:05
(Received via mailing list)
Mauricio,

When you say:
<<just one runtime and a "config.threadsafe!" in your environment.rb
file will do the trick.>>

but the docs say:

<<
Multi-thread-safe execution (as introduced in Rails 2.2 or for Merb)
is detected and runtime pooling is disabled. You would still need to
tell Rails to enable multi-threading by commenting out the following
line from config/environments/production.rb.

config.threadsafe!
>>

Of course, I dont see the expressioni "config.threadsafe!" in either
config/environment.rb or config/environments/production.rb

Can you show me, exactly what I need to put where, to accomplish this?
Thanks, Janna B

On Jun 5, 9:18 am, Maurício Linhares <removed_email_address@domain.invalid>
Maurício L. (Guest)
on 2009-06-06 02:10
(Received via mailing list)
First, read this (and the links) carefully -
http://guides.rubyonrails.org/2_2_release_notes.ht...

Then at your environment.rb file config block, just add the following
line:

config.threadsafe!

And then you don't need more than one instance of your application.

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
JannaB (Guest)
on 2009-06-06 03:54
(Received via mailing list)
This is really quite  remarkable -- and is part of the promise of Ruby
with regards to simplification. Once you set this up, set it to port
80 -- goodbye Apache and J2EE servers (unless you need them for, say,
EJB support, etc) EVEN if you are running straight Ruby with no Java
-- might as well deploy with Jruby and the Glassfish gem set up this
way. This can handle quite the load. -Janna B.

On Jun 5, 9:38 am, Maurício Linhares <removed_email_address@domain.invalid>
JannaB (Guest)
on 2009-06-07 22:30
(Received via mailing list)
If I am using only Glassfish, and deploying to say, port 80 ....how
can I handle multiple sites (multiple rails root dirs) on the same
machine? -JannaB
Vivek P. (Guest)
on 2009-06-08 02:18
(Received via mailing list)
To host multiple applications, on the same server, you should be using
the
glassfish application server (not glassfish gem).

So , let say you have a running glassfish v3 server and lets say you
have
two apps in directories

~/apps1
~/apps2

You would deploy them as:


asadmin deploy ~/apps1
asadmin deploy ~/apps2

Then you can access these apps at, http://localhost:80/apps1/ and
http://localhost:80/apps2/

You also have option to package the Rails app as WAR file and deploy on
GlassFish server. See warbler doc,
http://caldersphere.rubyforge.org/warbler/.

-vivek.
Maurício L. (Guest)
on 2009-06-08 07:07
(Received via mailing list)
Don't use the glassfish app server for that, it's overkill, use a
lightweight solution like jetty -> http://jetty.mortbay.com/

Download the binary, generate a war file for your project using
warbler and then copy the .war file to the "your jetty install
folder"/webapps. Start jetty and the application should be available
at "http://localhost:8080/war_file_name".

-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) |
http://codeshooter.wordpress.com/ (en)
Vivek P. (Guest)
on 2009-06-08 22:25
(Received via mailing list)
Huh! What is overkill with GlassFish? With glassfish v3 server, you can
deploy your Rails application without any packaging. Just to run your
Rails
app on a Java server should not ask you to package it as WAR file.

Get glassfish v3 preview from here:
http://download.java.net/glassfish/v3-preview/rele...

and try it it is fast, reliable and suports deployment of Rails
applications
developed on JRuby  without any need to do any additional
packaging/configuration etc.

-vivek.
2009/6/7 Maurício Linhares <removed_email_address@domain.invalid>
Maurício L. (Guest)
on 2009-06-08 22:30
(Received via mailing list)
Using the full Glassfish applicaiton server to host many Rails
applications at the same time is overkill and a waste of resources.
Someone trying to get many applications to run at the same time with
just one server are really better served using a lightweight solution
like Jetty or maybe even Tomcat (but I woudn't recommend using the
later).

Look that we're not talking about hosting just one application (which
was Janna's problem at the beginning and to which I said that using
the Glassfish gem would do it nicely) but hosting many applications at
the same time.

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr
Hassan S. (Guest)
on 2009-06-08 22:55
(Received via mailing list)
2009/6/8 Maurício Linhares <removed_email_address@domain.invalid>:

> ...or maybe even Tomcat (but I woudn't recommend using the
> later).

? Because ?

--
Hassan S. ------------------------ removed_email_address@domain.invalid
Maurício L. (Guest)
on 2009-06-08 22:58
(Received via mailing list)
Tomcat is famous for it's memory leaks and classloading issues, not
really sure if they have improved it in anyway in this 6 version, but
Tomcat 5 was a pain to get working specially if you used any of the
Jakarta Commons libraries in your application.

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr

On Mon, Jun 8, 2009 at 3:53 PM, Hassan
Phlip (Guest)
on 2009-06-08 23:04
(Received via mailing list)
Hassan S. wrote:

>> ...or maybe even Tomcat (but I woudn't recommend using the
>> later).
>
> ? Because ?

   http://c2.com/cgi/wiki?ConfigurationHell

--
   Phlip
   http://c2.com/cgi/wiki?ConfigurationHell
Hassan S. (Guest)
on 2009-06-08 23:05
(Received via mailing list)
2009/6/8 Maurício Linhares <removed_email_address@domain.invalid>:
>
> Tomcat is famous for it's memory leaks and classloading issues, not
> really sure if they have improved it in anyway in this 6 version, but
> Tomcat 5 was a pain to get working specially if you used any of the
> Jakarta Commons libraries in your application.

? I've never had (or heard of) any such problems, and I've been
using Tomcat for Java apps since the 3.x days.

And right now I have a multi-site production Tomcat 6.0.x server
that's been up for nearly a year. And yes, I use various commons
libraries on some of them.

So I'd suggest your information is, at the least, out-of-date.

--
Hassan S. ------------------------ removed_email_address@domain.invalid
Maurício L. (Guest)
on 2009-06-08 23:25
(Received via mailing list)
Well, maybe you're one of the lucky guys that never had them, try
searching on Google for "tomcat memory leaks", there's plenty of
things about it, most of them related to the use and the inability to
unload classes from the Jakarta commons libraries that Tomcat and the
application both are using.

But this isn't really a discussion for a ROR list ;)

And I'd go for Jetty anyway - http://jetty.mortbay.com/

-
Maurício Linhares
http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr



On Mon, Jun 8, 2009 at 4:04 PM, Hassan
Alex B. (Guest)
on 2009-06-18 14:06
Vivek P. wrote:
> Huh! What is overkill with GlassFish? With glassfish v3 server, you can
> deploy your Rails application without any packaging. Just to run your
> Rails
> app on a Java server should not ask you to package it as WAR file.
>
> Get glassfish v3 preview from here:
> http://download.java.net/glassfish/v3-preview/rele...
>
> and try it it is fast, reliable and suports deployment of Rails
> applications
> developed on JRuby  without any need to do any additional
> packaging/configuration etc.
>
> -vivek.
> 2009/6/7 Maurício Linhares <removed_email_address@domain.invalid>

Hi Vivek,

Can you perhaps point me in a direction on how to get our rails app up
and running with glassfish v3 server? We need to bring our app to
production soon. Currently we are running with the glassfish gem, but it
has the limitation that jdbc connection pooling can't be enabled. We
really should enable this for production.

Also it seems the gem suffers from some memory problems. We configure it
to use maximum 4 instances, but after some time it just crashes with an
out of memory error. In the logs it looks like many more instances are
created than the maximum, which supposedly causes the memory to run out
after some time.

We start glassfish with this command on a 8 core windows server 2003
with 4GB of memory:
jruby -J-server -J-Xmx1400m -J-Xms1400m -J-XX:PermSize=256m
-J-XX:MaxPermSize=256m -S glassfish -n 4 --runtimes-max 4 -e prd -p 3010
D:\MPP\jruby\rails

Thanks,
Alex
Vivek P. (Guest)
on 2009-06-18 20:52
(Received via mailing list)
Perhaps, we can take this discussion to glassfish gem forum at:
http://rubyforge.org/forum/forum.php?forum_id=21309.

Anyway, to answer your question:


On Thu, Jun 18, 2009 at 3:06 AM, Alex Buijs <
removed_email_address@domain.invalid> wrote:

> >
> Can you perhaps point me in a direction on how to get our rails app up
> and running with glassfish v3 server? We need to bring our app to
> production soon. Currently we are running with the glassfish gem, but it
> has the limitation that jdbc connection pooling can't be enabled. We
> really should enable this for production.
>


Right it is a pending feature request for gem, I can try to implement
this
feature request in the next gem release.


>
> Also it seems the gem suffers from some memory problems. We configure it
> to use maximum 4 instances, but after some time it just crashes with an
> out of memory error. In the logs it looks like many more instances are
> created than the maximum, which supposedly causes the memory to run out
> after some time.
>

This should not happen. You may be better off by fixing the pool size.
The
dynamic pool behavior might be causing issues.

Try this argument so that the dynamic pooling does not try to shrink the
pool size:

--runtimes-min 4



> We start glassfish with this command on a 8 core windows server 2003
> with 4GB of memory:
> jruby -J-server -J-Xmx1400m -J-Xms1400m -J-XX:PermSize=256m
> -J-XX:MaxPermSize=256m -S glassfish -n 4 --runtimes-max 4 -e prd -p 3010
> D:\MPP\jruby\rails
>

These settings look ok.

See instructions to run your rails app on glassfish v3:

http://wiki.glassfish.java.net/Wiki.jsp?page=Deplo...

You can reach me at vivek.pandey at gmail.com and I can help you go to
production for any specific need.

-vivek.
Alex B. (Guest)
on 2009-06-19 17:35
You're right that this is maybe not the right place for my questions.
Thanks anyway for your answers!

A next gem release with connection pooling would be fantastic! I'll look
out for that release.

Setting the minimum number of runtimes is a great suggestion. I will try
that out and post back the results.

----
Alex
This topic is locked and can not be replied to.