Changeset 916

Show
Ignore:
Timestamp:
12/16/07 16:42:53 (9 months ago)
Author:
wayneeseguin
Message:

New Mongrel.log is verified working for Mongrel Handler, Rails and Merb.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bin/mongrel_rails

    r899 r916  
    7676      if @generate 
    7777        @generate = File.expand_path(@generate) 
    78         log(:error, "** Writing config to \"#@generate\".") 
     78        Mongrel.log(:error, "** Writing config to \"#@generate\".") 
    7979        open(@generate, "w") {|f| f.write(settings.to_yaml) } 
    80         log(:error, "** Finished.  Run \"mongrel_rails start -C #@generate\" to use the config file.") 
     80        Mongrel.log(:error, "** Finished.  Run \"mongrel_rails start -C #@generate\" to use the config file.") 
    8181        exit 0 
    8282      end 
     
    8585        if defaults[:daemon] 
    8686          if File.exist? defaults[:pid_file] 
    87             log "!!! PID file #{defaults[:pid_file]} already exists.  Mongrel could be running already.  Check your #{defaults[:log_file]} for errors." 
    88             log "!!! Exiting with error.  You must stop mongrel and clear the .pid before I'll attempt a start." 
     87            Mongrel.error(:info, "!!! PID file #{defaults[:pid_file]} already exists.  Mongrel could be running already.  Check your #{defaults[:log_file]} for errors.") 
     88            Mongrel.log(:error, "!!! Exiting with error.  You must stop mongrel and clear the .pid before I'll attempt a start.") 
    8989            exit 1 
    9090          end 
    9191 
    9292          daemonize 
    93           log "Daemonized, any open files are closed.  Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info." 
    94           log "Settings loaded from #{@config_file} (they override command line)." if @config_file 
    95         end 
    96  
    97         log "Starting Mongrel listening at #{defaults[:host]}:#{defaults[:port]}" 
     93          Mongrel.log(:info, "Daemonized, any open files are closed.  Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info.") 
     94          Mongrel.log(:info, "Settings loaded from #{@config_file} (they override command line).") if @config_file 
     95        end 
     96 
     97        Mongrel.log(:info, "Starting Mongrel listening at #{defaults[:host]}:#{defaults[:port]}") 
    9898 
    9999        listener do 
    100100          mime = {} 
    101101          if defaults[:mime_map] 
    102             log "Loading additional MIME types from #{defaults[:mime_map]}" 
     102            Mongrel.log(:info, "Loading additional MIME types from #{defaults[:mime_map]}") 
    103103            mime = load_mime_map(defaults[:mime_map], mime) 
    104104          end 
    105105 
    106106          if defaults[:debug] 
    107             log "Installing debugging prefixed filters. Look in log/mongrel_debug for the files." 
     107            Mongrel.log(:info, "Installing debugging prefixed filters. Look in log/mongrel_debug for the files.") 
    108108            debug "/" 
    109109          end 
    110110 
    111           log "Starting Rails with #{defaults[:environment]} environment..." 
    112           log "Mounting Rails at #{defaults[:prefix]}..." if defaults[:prefix] 
     111          Mongrel.log(:info, "Starting Rails with #{defaults[:environment]} environment...") 
     112          Mongrel.log(:info, "Mounting Rails at #{defaults[:prefix]}...") if defaults[:prefix] 
    113113          uri defaults[:prefix] || "/", :handler => rails(:mime => mime, :prefix => defaults[:prefix]) 
    114           log "Rails loaded." 
    115  
    116           log "Loading any Rails specific GemPlugins" 
     114          Mongrel.log(:info, "Rails loaded.") 
     115 
     116          Mongrel.log(:info, "Loading any Rails specific GemPlugins" ) 
    117117          load_plugins 
    118118 
    119119          if defaults[:config_script] 
    120             log "Loading #{defaults[:config_script]} external config script" 
     120            Mongrel.log(:info, "Loading #{defaults[:config_script]} external config script") 
    121121            run_config(defaults[:config_script]) 
    122122          end 
     
    127127 
    128128      config.run 
    129       config.log "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at #{@address}:#{@port}" 
     129      Mongrel.log(:info, "Mongrel #{Mongrel::Const::MONGREL_VERSION} available at #{@address}:#{@port}") 
    130130 
    131131      if config.defaults[:daemon] 
    132132        config.write_pid_file 
    133133      else 
    134         config.log "Use CTRL-C to stop."  
     134        Mongrel.log(:info, "Use CTRL-C to stop.") 
    135135      end 
    136136 
     
    140140        unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ 
    141141          cmd = "ruby #{__FILE__} start #{original_args.join(' ')}" 
    142           config.log "Restarting with arguments:  #{cmd}" 
     142          Mongrel.log(:info, "Restarting with arguments:  #{cmd}") 
    143143          config.stop(false, true) 
    144144          config.remove_pid_file 
     
    147147            system cmd 
    148148          else 
    149             log(:error, "Can't restart unless in daemon mode.") 
     149            Mongrel.log(:error, "Can't restart unless in daemon mode.") 
    150150            exit 1 
    151151          end 
    152152        else 
    153           config.log "Win32 does not support restarts. Exiting." 
     153          Mongrel.log(:info, "Win32 does not support restarts. Exiting.") 
    154154        end 
    155155      end 
     
    161161        settings = YAML.load_file(@config_file) 
    162162      ensure 
    163         log(:error, "** Loading settings from #{@config_file} (they override command line)." unless @daemon || settings[:daemon] ) 
     163        Mongrel.log(:error, "** Loading settings from #{@config_file} (they override command line).") unless @daemon || settings[:daemon] 
    164164      end 
    165165 
  • trunk/examples/builder.rb

    r899 r916  
    55 
    66  def process(request, response) 
    7     log(:error, "My options are: #{options.inspect}") 
    8     log(:error, "Request Was:") 
    9     log(:error, request.params.to_yaml) 
     7    Mongrel.log(:error, "My options are: #{options.inspect}") 
     8    Mongrel.log(:error, "Request Was:") 
     9    Mongrel.log(:error, request.params.to_yaml) 
    1010  end 
    1111end 
  • trunk/ext/http11/http11.c

    r895 r916  
    392392  DEF_GLOBAL(server_protocol_value, "HTTP/1.1"); 
    393393  DEF_GLOBAL(http_host, "HTTP_HOST"); 
    394   DEF_GLOBAL(mongrel_version, "Mongrel 1.1.1"); /* XXX Why is this defined here? */ 
     394  DEF_GLOBAL(mongrel_version, "Mongrel 1.1.2"); /* XXX Why is this defined here? */ 
    395395  DEF_GLOBAL(server_software, "SERVER_SOFTWARE"); 
    396396  DEF_GLOBAL(port_80, "80"); 
  • trunk/lib/mongrel.rb

    r915 r916  
     1# Ruby 
    12require 'socket' 
    23require 'tempfile' 
     
    78require 'stringio' 
    89 
     10# Ensure working require 
    911require 'mongrel/gems' 
    1012 
     13# TODO: Only require these for RUBY_VERSION <= 1.8.6  
     14#       and only for platforms that require it, exclusive matching 
     15if !RUBY_PLATFORM.match(/java|mswin/) && !RUBY_VERSION.match(/1\.8\.\d/) 
    1116Mongrel::Gems.require 'cgi_multipart_eof_fix' 
    1217Mongrel::Gems.require 'fastthread' 
     18end 
    1319require 'thread' 
    1420 
     
    184190        client.close rescue nil 
    185191      rescue HttpParserError => e 
    186         log(:error, "#{Time.now.httpdate}: HTTP parse error, malformed request (#{params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last}): #{e.inspect}") 
    187         log(:error, "#{Time.now.httpdate}: REQUEST DATA: #{data.inspect}\n---\nPARAMS: #{params.inspect}\n---\n") 
     192        Mongrel.log(:error, "#{Time.now.httpdate}: HTTP parse error, malformed request (#{params[Const::HTTP_X_FORWARDED_FOR] || client.peeraddr.last}): #{e.inspect}") 
     193        Mongrel.log(:error, "#{Time.now.httpdate}: REQUEST DATA: #{data.inspect}\n---\nPARAMS: #{params.inspect}\n---\n") 
    188194        # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4 
    189195        client.write(Const::ERROR_400_RESPONSE) 
     
    191197        reap_dead_workers('too many files') 
    192198      rescue Object => e 
    193         log(:error, "#{Time.now.httpdate}: Read error: #{e.inspect}") 
    194         log(:error, e.backtrace.join("\n")) 
     199        Mongrel.log(:error, "#{Time.now.httpdate}: Read error: #{e.inspect}") 
     200        Mongrel.log(:error, e.backtrace.join("\n")) 
    195201      ensure 
    196202        begin 
     
    199205          # Already closed 
    200206        rescue Object => e 
    201           log(:error, "#{Time.now.httpdate}: Client error: #{e.inspect}") 
    202           log(:error, e.backtrace.join("\n")) 
     207          Mongrel.log(:error, "#{Time.now.httpdate}: Client error: #{e.inspect}") 
     208          Mongrel.log(:error, e.backtrace.join("\n")) 
    203209        end 
    204210        request.body.delete if request and request.body.class == Tempfile 
     
    212218    def reap_dead_workers(reason='unknown') 
    213219      if @workers.list.length > 0 
    214         log(:error, "#{Time.now.httpdate}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'") 
     220        Mongrel.log(:error, "#{Time.now.httpdate}: Reaping #{@workers.list.length} threads for slow workers because of '#{reason}'") 
    215221        error_msg = "#{Time.now.httpdate}: Mongrel timed out this thread: #{reason}" 
    216222        mark = Time.now 
     
    219225 
    220226          if mark - worker[:started_on] > @timeout + @throttle 
    221             log(:error, "#{Time.now.httpdate}: Thread #{worker.inspect} is too old, killing.") 
     227            Mongrel.log(:error, "#{Time.now.httpdate}: Thread #{worker.inspect} is too old, killing.") 
    222228            worker.raise(TimeoutError.new(error_msg)) 
    223229          end 
     
    234240    def graceful_shutdown 
    235241      while reap_dead_workers("shutdown") > 0 
    236         log(:error, "#{Time.now.httpdate}: Waiting for #{@workers.list.length} requests to finish, could take #{@timeout + @throttle} seconds.") 
     242        Mongrel.log(:error, "#{Time.now.httpdate}: Waiting for #{@workers.list.length} requests to finish, could take #{@timeout + @throttle} seconds.") 
    237243        sleep @timeout / 10 
    238244      end 
     
    280286   
    281287              if worker_list.length >= @num_processors 
    282                 log(:error, "#{Time.now.httpdate}: Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection.") 
     288                Mongrel.log(:error, "#{Time.now.httpdate}: Server overloaded with #{worker_list.length} processors (#@num_processors max). Dropping connection.") 
    283289                client.close rescue nil 
    284290                reap_dead_workers("max processors") 
     
    299305              client.close rescue nil 
    300306            rescue Object => e 
    301               log(:error, "#{Time.now.httpdate}: Unhandled listen loop exception #{e.inspect}.") 
    302               log(:error, e.backtrace.join("\n")) 
     307              Mongrel.log(:error, "#{Time.now.httpdate}: Unhandled listen loop exception #{e.inspect}.") 
     308              Mongrel.log(:error, e.backtrace.join("\n")) 
    303309            end 
    304310          end 
     
    306312        ensure 
    307313          @socket.close 
    308           # log(:error, "#{Time.now.httpdate}: Closed socket.") 
     314          # Mongrel.log(:error, "#{Time.now.httpdate}: Closed socket.") 
    309315        end 
    310316      end 
  • trunk/lib/mongrel/command.rb

    r852 r916  
    5656        @opt.on_tail("-h", "--help", "Show this message") do 
    5757          @done_validating = true 
    58           puts @opt 
     58          Mongrel.log(:info, @opt) 
    5959        end 
    6060 
     
    6363          @done_validating = true 
    6464          if VERSION 
    65             puts "Version #{Mongrel::Const::MONGREL_VERSION}" 
     65            Mongrel.log(:info, "Version #{Mongrel::Const::MONGREL_VERSION}") 
    6666          end 
    6767        end 
     
    156156      # Prints a list of available commands. 
    157157      def print_command_list 
    158         puts "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n" 
     158        Mongrel.log(:info, "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n") 
    159159 
    160160        self.commands.each do |name| 
     
    163163          end 
    164164 
    165           puts " - #{name[1 .. -1]}\n" 
    166         end 
    167  
    168         puts "\nEach command takes -h as an option to get help." 
     165          Mongrel.log(:info, " - #{name[1 .. -1]}\n") 
     166        end 
     167 
     168        Mongrel.log(:info, "\nEach command takes -h as an option to get help.") 
    169169 
    170170      end 
     
    181181          return true 
    182182        elsif cmd_name == "--version" 
    183           puts "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}" 
     183          Mongrel.log(:info, "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}") 
    184184          return true 
    185185        end 
  • trunk/lib/mongrel/configurator.rb

    r915 r916  
    6060 
    6161        if uid != target_uid or gid != target_gid 
    62           log(:info, "Initiating groups for #{user.inspect}:#{group.inspect}.") 
     62          Mongrel.log(:info, "Initiating groups for #{user.inspect}:#{group.inspect}.") 
    6363          Process.initgroups(user, target_gid) 
    6464         
    65           log(:info, "Changing group to #{group.inspect}.") 
     65          Mongrel.log(:info, "Changing group to #{group.inspect}.") 
    6666          Process::GID.change_privilege(target_gid) 
    6767 
    68           log(:info, "Changing user to #{user.inspect}." ) 
     68          Mongrel.log(:info, "Changing user to #{user.inspect}." ) 
    6969          Process::UID.change_privilege(target_uid) 
    7070        end 
    7171      rescue Errno::EPERM => e 
    72         log(:critical, "Couldn't change user and group to #{user.inspect}:#{group.inspect}: #{e.to_s}.") 
    73         log(:critical, "Mongrel failed to start.") 
     72        Mongrel.log(:critical, "Couldn't change user and group to #{user.inspect}:#{group.inspect}: #{e.to_s}.") 
     73        Mongrel.log(:critical, "Mongrel failed to start.") 
    7474        exit 1 
    7575      end 
     
    8383    def write_pid_file 
    8484      unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ 
    85         log(:info, "Writing PID file to #{@pid_file}") 
     85        Mongrel.log(:info, "Writing PID file to #{@pid_file}") 
    8686        open(@pid_file,"w") {|f| f.write(Process.pid) } 
    8787        open(@pid_file,"w") do |f| 
     
    193193          logfile = File.join(ops[:cwd],logfile) 
    194194          if not File.exist?(File.dirname(logfile)) 
    195             log(:critical, "!!! Log file directory not found at full path #{File.dirname(logfile)}.  Update your configuration to use a full path.") 
     195            Mongrel.log(:critical, "!!! Log file directory not found at full path #{File.dirname(logfile)}.  Update your configuration to use a full path.") 
    196196            exit 1 
    197197          end 
     
    204204 
    205205      else 
    206         log(:warning, "WARNING: Win32 does not support daemon mode.") 
     206        Mongrel.log(:warning, "WARNING: Win32 does not support daemon mode.") 
    207207      end 
    208208    end 
     
    250250 
    251251      # check all the mime types to make sure they are the right format 
    252       mime.each {|k,v| log(:warning, "WARNING: MIME type #{k} must start with '.'") if k.index(".") != 0 } 
     252      mime.each {|k,v| Mongrel.log(:warning, "WARNING: MIME type #{k} must start with '.'") if k.index(".") != 0 } 
    253253 
    254254      return mime 
     
    362362 
    363363      # forced shutdown, even if previously restarted (actually just like TERM but for CTRL-C) 
    364       trap("INT") { log(:notice, "INT signal received."); stop(false) } 
     364      trap("INT") { Mongrel.log(:notice, "INT signal received."); stop(false) } 
    365365 
    366366      # always clean up the pid file 
     
    369369      unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ 
    370370        # graceful shutdown 
    371         trap("TERM") { log(:notice, "TERM signal received."); stop } 
     371        trap("TERM") { Mongrel.log(:notice, "TERM signal received."); stop } 
    372372        # debug mode 
    373         trap("USR1") { log(:notice, "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"); $mongrel_debug_client = !$mongrel_debug_client } 
     373        trap("USR1") { Mongrel.log(:notice, "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"); $mongrel_debug_client = !$mongrel_debug_client } 
    374374        # restart 
    375         trap("USR2") { log(:notice, "USR2 signal received."); stop(true) } 
    376  
    377         log(:notice, "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).") 
     375        trap("USR2") { Mongrel.log(:notice, "USR2 signal received."); stop(true) } 
     376 
     377        Mongrel.log(:notice, "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).") 
    378378      else 
    379         log(:notice, "Signals ready.  INT => stop (no restart).") 
     379        Mongrel.log(:notice, "Signals ready.  INT => stop (no restart).") 
    380380      end 
    381381    end 
  • trunk/lib/mongrel/debug.rb

    r899 r916  
    9898      p = request.params 
    9999      #STDERR.puts "#{p['REMOTE_ADDR']} - [#{Time.now.httpdate}] \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\"" 
    100       log(:info, "#{p['REMOTE_ADDR']} \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\"") 
     100      Mongrel.log(:info, "#{p['REMOTE_ADDR']} \"#{p['REQUEST_METHOD']} #{p["REQUEST_URI"]} HTTP/1.1\"") 
    101101    end 
    102102  end 
  • trunk/lib/mongrel/logger.rb

    r915 r916  
    33#       Merb:  http://merbivore.com 
    44module Mongrel 
    5  
    6   #class << self 
    7   #  attr_accessor :logger 
    8   #end 
    95 
    106  class Log 
     
    2117      @log_level = Levels[:name][log_level] 
    2218 
    23       if !RUBY_PLATFORM.match(/java|mswin/) &&  
    24          !(@log == STDOUT) &&  
    25         @log.respond_to?(:write_nonblock) 
    26          
     19      if !RUBY_PLATFORM.match(/java|mswin/) && !(@log == STDOUT) &&  
     20           @log.respond_to?(:write_nonblock) 
    2721        @aio = true 
    2822      end 
     23      $MongrelLogger = self 
    2924    end 
    3025     
     
    5348        @log = open(log, (File::WRONLY | File::APPEND | File::CREAT)) 
    5449        @log.sync = true 
    55         @log.write("#{Time.now.httpdate} Logfile created") 
     50        @log.write("#{Time.now.httpdate} Logfile created\n") 
    5651      end 
    5752    end 
     
    6156  # Convenience wrapper for logging, allows us to use Mongrel.log 
    6257  def self.log(level, string) 
    63     logger.log(level,string) 
     58    # If no logger was defined, log to STDOUT. 
     59    $MongrelLogger ||= Mongrel::Log.new(STDOUT, :debug) 
     60    $MongrelLogger.log(level,string) 
    6461  end 
    6562   
  • trunk/lib/mongrel/rails.rb

    r891 r916  
    162162        end 
    163163 
    164         log "Reloading Rails..." 
     164        Mongrel.log(:info, "Reloading Rails...") 
    165165        @rails_handler.reload! 
    166         log "Done reloading Rails." 
     166        Mongrel.log(:info, "Done reloading Rails.") 
    167167 
    168168      end 
     
    176176        unless RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ 
    177177          # rails reload 
    178           trap("HUP") { log "HUP signal received."; reload!         
     178          trap("HUP") { Mongrel.log(:info, "HUP signal received."); reload!
    179179 
    180           log "Rails signals registered.  HUP => reload (without restart).  It might not work well." 
     180          Mongrel.log(:info, "Rails signals registered.  HUP => reload (without restart).  It might not work well.") 
    181181        end 
    182182      end 
  • trunk/projects/mongrel_cluster/lib/mongrel_cluster/init.rb

    r899 r916  
    8181        if @clean && pid_file_exists?(port) && !check_process(port) 
    8282          pid_file = port_pid_file(port)         
    83           log "missing process: removing #{pid_file}" 
     83          Mongrel.log(:info, "missing process: removing #{pid_file}") 
    8484          chdir_cwd do 
    8585            File.unlink(pid_file)  
     
    8888         
    8989        if pid_file_exists?(port) && check_process(port) 
    90           log "already started port #{port}"          
     90          Mongrel.log(:info, "already started port #{port}") 
    9191          next 
    9292        end 
     
    9494        exec_cmd = cmd + " -p #{port} -P #{port_pid_file(port)}" 
    9595        exec_cmd += " -l #{port_log_file(port)}" 
    96         log "starting port #{port}"           
     96        Mongrel.log(:info, "starting port #{port}") 
    9797        log_verbose exec_cmd 
    9898        output = `#{exec_cmd}` 
    99         log(:error, output) unless $?.success? 
     99        Mongrel.log(:error, output) unless $?.success? 
    100100      end 
    101101    end 
     
    113113        pid = check_process(port)         
    114114        if @clean && pid && !pid_file_exists?(port)        
    115           log "missing pid_file: killing mongrel_rails port #{port}, pid #{pid}" 
     115          Mongrel.log(:info, "missing pid_file: killing mongrel_rails port #{port}, pid #{pid}") 
    116116          Process.kill("KILL", pid.to_i)   
    117117        end 
    118118         
    119119        if !check_process(port) 
    120           log "already stopped port #{port}"                    
     120          Mongrel.log(:info, "already stopped port #{port}") 
    121121          next        
    122122        end 
    123123 
    124124        exec_cmd = cmd + " -P #{port_pid_file(port)}" 
    125         log "stopping port #{port}"           
     125        Mongrel.log(:info, "stopping port #{port}") 
    126126        log_verbose exec_cmd 
    127127        output = `#{exec_cmd}` 
    128         log(:error, output) unless $?.success? 
     128        Mongrel.log(:error, output) unless $?.success? 
    129129         
    130130      end 
     
    139139        pid = check_process(port)         
    140140        unless pid_file_exists?(port)         
    141           log(:error, "missing pid_file: #{port_pid_file(port)}") 
     141          Mongrel.log(:error, "missing pid_file: #{port_pid_file(port)}") 
    142142          status = STATUS_ERROR 
    143143        else 
    144           log(:info, "found pid_file: #{port_pid_file(port)}") 
     144          Mongrel.log(:info, "found pid_file: #{port_pid_file(port)}") 
    145145        end     
    146146        if pid 
    147           log(:info, "found mongrel_rails: port #{port}, pid #{pid}") 
     147          Mongrel.log(:info, "found mongrel_rails: port #{port}, pid #{pid}") 
    148148        else 
    149           log(:error, "missing mongrel_rails: port #{port}") 
     149          Mongrel.log(:error, "missing mongrel_rails: port #{port}") 
    150150          status = STATUS_ERROR 
    151151        end 
    152         log(:info, "") 
     152        Mongrel.log(:info, "") 
    153153      end 
    154154 
     
    213213     
    214214    def log_verbose(message) 
    215       log(:info, message) if @verbose 
     215      Mongrel.log(:info, message) if @verbose 
    216216    end 
    217217 
     
    330330      @options["prefix"] = @prefix if @prefix 
    331331       
    332       log "Writing configuration file to #{@config_file}." 
     332      Mongrel.log(:info, "Writing configuration file to #{@config_file}.") 
    333333      File.open(@config_file,"w") {|f| f.write(@options.to_yaml)} 
    334334    end   
  • trunk/site/src/docs/howto.page

    r579 r916  
    399399 
    400400 <pre><code> 
    401  trap("USR1") { log "I'm doing stuff."
     401 trap("USR1") { Mongrel.log(:info, "I'm doing stuff.")
    402402 </code></pre> 
    403403