Re: Can't get mod_ruby to work
Arnold Daniels <[email protected]> Thu, 15 Nov 2007 21:41:45 +0100
| Newsgroups | gmane.comp.apache.mod-ruby |
|---|---|
| Message-ID | <[email protected]> |
Hi David, Thanks for you answer. We use pre-fork, so it doesn't matter if Rails isn't thread-safe because each connection will be handled by a different process. We also run PHP as Apache module, which also isn't thread-safe. If I'm missing the point please tell me why. A bit more background information. We run linux a custom kernel patch, which allows switching a specific user (www-data) to switch to another user (>2000) within a process. It also allows switching back, but only by the main process and not child processes. This works great as long a the user can not make custom system calls within the Apache process. That is why we cannot support fcgi. I'm aware that this is not 100%, but it is safe enough. Hack attempts (using buffer overflows) will most likely cause segmentation faults and we have a daemon monitoring that (never happened by the way). For the record, this hack can never make you root, at best you can read/change files of a customer (which would already be pretty bad). However, the current problem doesn't have anything to do with Rails. As soon as I add 'RubyRequire apache/ruby-run' to my Apache config, the server will stop handling any requests. It will still accept connections, but does not more than that. Has anyone seen this behaviour before, or can anyone who know the internals tell me what this might be causing. I you need more information, a strace for example (I didn't see anything in the strace), please tell me. Best regards, Arnold Daniels David Heinemeier Hansson wrote: > Hi Arnold, > > Rails won't work by default in a mod_ruby environment where multiple > applications are sharing the same setup. mod_ruby shares the Ruby > instance across all the applications and Rails use essentially global > variables that are not compatible with having that information shared > across multiple applications. > > I don't know of any other hosts that takes Rails hosting serious that > are using mod_ruby. Everyone else are using either FastCGI or Mongrel. > Given your constraints, I don't think running Rails is going to be > something you can offer. > > I do know that some experimental support for running Rails under > mod_ruby was done a few years back, but I don't think it solved the > fundamental issue of having a shared Ruby instance, which is not safe. > >> To give you a bit of background. I'm setting up a test project to see >> if we can support Ruby on Rails for our hosting company. I need a >> solution which fits in a 100% automated set-up. Tomcat does not and I >> don't know mongrel, but I doubt if it does. Also in our setup the >> Apache process switches to the user, for security purposes, so >> running another daemon is not an option. Supporting fastcgi is also >> not an option for security issues and running it as normal cgi is a >> performance killer. In short I want to run it using mod_ruby. I'm not >> sure how I gave the impression that using mod_ruby or supporting >> Rails was optional, but it's not. Otherwise I would not have posted >> in on the mod_ruby mailing list. >> >> I assume that mod_ruby is working for other people and I'm doing >> something wrong. I would like to hear from people who do have it >> working, because I can't get it to work at all. I don't see any >> errors. Where should I look to find what is wrong or is this a known >> issue? >> >> So please, anybody who doesn't like Ruby, Ruby on Rails, mod_ruby or >> Apache, I am not interested in your opinion. >> >> Best regards, >> Arnold Daniels >> >> --------------------- >> >> Trying 127.0.0.1... >> Connected to localhost. >> Escape character is '^]'. >> GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 >> >> (No response on this) >> >> -------------------- >> >> arnold@arnold-laptop:/etc/apache2$ sudo apache2 -M >> Loaded Modules: >> core_module (static) >> log_config_module (static) >> logio_module (static) >> mpm_itk_module (static) >> http_module (static) >> so_module (static) >> alias_module (shared) >> auth_basic_module (shared) >> authn_file_module (shared) >> authz_default_module (shared) >> authz_groupfile_module (shared) >> authz_host_module (shared) >> authz_user_module (shared) >> autoindex_module (shared) >> cgi_module (shared) >> cgid_module (shared) >> dir_module (shared) >> env_module (shared) >> evasive20_module (shared) >> info_module (shared) >> macro_module (shared) >> mime_module (shared) >> negotiation_module (shared) >> php5_module (shared) >> proxy_module (shared) >> proxy_http_module (shared) >> rewrite_module (shared) >> ruby_module (shared) >> setenvif_module (shared) >> status_module (shared) >> userdir_module (shared) >> xsendfile_module (shared) >> >> >> David Heinemeier Hansson wrote: >>> Please. Before you throw your arms up in despair and forsake all >>> that is good, have a look at what's been a best-practice deployment >>> scenario for a long time now: Web server -> proxy -> mongrels. >>> >>> If you like Apache, you can for example use mod_proxy_balancer (see >>> http://blog.innerewut.de/2006/04/21/scaling-rails-with-apache-2-2-mod_proxy_balancer-and-mongrel for >>> detailed instructions). Or you could use HAProxy (see >>> http://rubyworks.rubyforge.org/installation/installation-continued.html for >>> more). There are tons of options out there and thousands of sites >>> putting them to good use in production. >>> >>> Abandoning Rails because you haven't looked into deployment >>> scenarios is like scrapping your car in favor of a horse because you >>> can't figure out how to open the trunk. An overreaction. >>> >>>> Hello, >>>> >>>> I can't help you, but I've pass through for almost the same >>>> configuration problems. >>>> I like very much the way things work in Ruby on Rails but when we need >>>> to deploy to production in Apache the problems arise. >>>> Why don't you take a look in grails that works like ruby and is very >>>> simple to deploy to Apache Tomcat? >>>> Here is the link -> http://grails.codehaus.org/ >>>> >>>> Manuel >>>> >>>> On Nov 15, 2007 3:10 PM, Arnold Daniels <[email protected]> wrote: >>>>> Hi all, >>>>> >>>>> I'm trying to use mod_ruby to serve a Ruby On Rails application. The >>>>> applications currently works with dispatch.cgi. I'm running Ubuntu >>>>> Gutsy >>>>> and installed ruby, mod_ruby and rails using apt-get. This package >>>>> only >>>>> comes with a ruby.load configuration file, which loads mod_ruby, but >>>>> does nothing more. I've created a ruby.conf file, based on the >>>>> information on the site. However as soon as I add 'RubyRequire >>>>> apache/ruby-run', the server stops responding. It accepts the >>>>> connection, but never handles the request. This is not only for ruby >>>>> scripts, but for all requests, even for static content. I do not >>>>> get any >>>>> report in the error log. >>>>> >>>>> Does this make sense to someone? I can't retrieve info, so I'm stuck. >>>>> >>>>> Any help would be highly appreciated. >>>>> >>>>> Best regards, >>>>> Arnold Daniels >>>>> >>>>> ------------------- >>>>> >>>>> root@arnold-laptop:/var/log/apache2# apache2 -v >>>>> Server version: Apache/2.2.4 (Ubuntu) >>>>> Server built: Oct 7 2007 22:17:24 >>>>> >>>>> >>>>> root@arnold-laptop:/etc/apache2/mods-enabled# cat ruby.load >>>>> LoadModule ruby_module /usr/lib/apache2/modules/mod_ruby.so >>>>> root@arnold-laptop:/etc/apache2/mods-enabled# cat ruby.conf >>>>> <IfModule mod_ruby.c> >>>>> RubyRequire apache/ruby-run >>>>> >>>>> # Execute files under /ruby as Ruby scripts >>>>> # <Location /ruby> >>>>> # SetHandler ruby-object >>>>> # RubyHandler Apache::RubyRun.instance >>>>> # </Location> >>>>> >>>>> # Execute *.rb files as Ruby scripts >>>>> <Files *.rb> >>>>> SetHandler ruby-object >>>>> RubyHandler Apache::RubyRun.instance >>>>> </Files> >>>>> </IfModule> >>>>> >>>>> >>>> >>> >>> -- >>> David Heinemeier Hansson >>> >>> >> > > -- > David Heinemeier Hansson > >