trinidad / trinidad_init_services

Run Trinidad as a service (based on Commons-Daemon and JRuby-JSVC)
Other
28 stars 10 forks source link

Trouble running on a win64 machine #19

Closed driehle closed 12 years ago

driehle commented 12 years ago

Hey there,

I tried to get trinidad and trinidad_init_service running on a Windows 64-bit system. Works for trinidad so far with rails s trinidad, however I can't geht the init_service up running.

Ran trinidad_init_service with this .yml file:

app_path: "C:/PSBuMoServer/App"
trinidad_options: "-e production -p 8080"
jruby_home: "C:/jruby-1.6.7"
ruby_compat_version: RUBY1_9
java_home: "C:/Program Files (x86)/Java/jre6"
trinidad_name: App
output_path: "C:/PSBuMoServer/Server"
pid_file: "C:/PSBuMoServer/Server/trinidad.pid"
log_file: "C:/PSBuMoServer/Server/trinidad.log"

As nothing happened, I used prunmgr.exe //ES//App to configure a log path for the service. The log file says the following:

[2012-05-08 22:20:03] [info]  Commons Daemon procrun (1.0.10.0 64-bit) started
[2012-05-08 22:20:03] [info]  Running 'App' Service...
[2012-05-08 22:20:03] [info]  Starting service...
[2012-05-08 22:20:04] [info]  Service started in 1066 ms.
[2012-05-08 22:20:16] [info]  Run service finished.
[2012-05-08 22:20:16] [info]  Commons Daemon procrun finished

Stdout-file:

2012-05-08 22:20:03 Commons Daemon procrun stdout initialized
Daemon arguments: [C:\jruby-1.6.7\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb, -d C:\PSBuMoServer\App, -e production -p 8080]

Stderr-file:

2012-05-08 22:20:03 Commons Daemon procrun stderr initialized
08.05.2012 22:20:06 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-3000"]
08.05.2012 22:20:06 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
08.05.2012 22:20:06 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.26
08.05.2012 22:20:06 org.apache.catalina.core.ContainerBase startInternal
SCHWERWIEGEND: A child container failed during start
java.util.concurrent.ExecutionException: org.jruby.exceptions.RaiseException: (SystemCallError) Unknown Error (20047) - C:\jruby-1.6.7\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\trinidad-libs\windows\amd64\ C:\PSBuMoServer\App\tmp
    at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1128)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:335)
[...]

(full text is here: http://pastebin.com/4wiLSuZ0)

Any idea what could have went wrong here? The (SystemCallError) Unknown Error (20047) doesn't help me a lot for debugging and googleing ;)

Additional information: The system has a 32-bit JRE and a 64-bit JRE installed. jRuby version was 1.6.7, but I also tried 1.6.7.2 without success.

Regards

kares commented 12 years ago

it seems like a OS "arch" mismatch ... your JRE seems to be 32-bit C:/Program Files (x86)/Java/jre6 but the prunsrv.exe used is based on the OS detected - 64-bit : C:\jruby-1.6.7\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\trinidad-libs\windows\amd64

on windows it always uses the bundled prunsrv.exe but since you installed prunmgr.exe it probably make sense to use the prunsrv.exe from the PATH if available ... to pick the correct executable java.lang.System.getProperty("os.arch") is used thus it picks the "amd64" version for you. we can probably do better by checking the java.lang.System.getProperty("sun.arch.data.model") first could you confirm that this does return 32 on your system from jruby's irb ?

also you can hand-try replacing the prunsrv.exe in the command attempted to run, it should be visible somewhere in the windows/service log just replace C:\jruby-1.6.7\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\trinidad-libs\windows\amd64\prunsrv.exe //IS//Trinidad ... with C:\jruby-1.6.7\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\trinidad-libs\windows\prunsrv.exe //IS//Trinidad ...

kares commented 12 years ago

just realized that java.lang.System.getProperty("os.arch") returns the JVM arch not the OS ! thus it seems your jruby setup launched with a 64-bit JVM but than the servive attempted to use the (default) 32-bit JVM.

driehle commented 12 years ago

Yes, I think I installed the 64bit version of jRuby. I will give it a try specifying the 64bit version for Trinidad manually. However if I remember correctly, I think the 64bit JRE doesn't have the client/jvm.dll, but I'll check again...

----- Reply message ----- Von: "Karol Bucek" reply@reply.github.com Datum: Mi., Mai. 9, 2012 11:30 Betreff: [trinidad_init_services] Trouble running on a win64 machine (#19) An: "driehle" webmaster@riehle-web.com

just realized that java.lang.System.getProperty("os.arch") returns the JVM arch not the OS ! thus it seems your jruby setup launched with a 64-bit JVM but than the servive attempted to use the (default) 32-bit JVM.


Reply to this email directly or view it on GitHub: https://github.com/trinidad/trinidad_init_services/issues/19#issuecomment-5596088

driehle commented 12 years ago

Ok. First I checked what java.lang.System.getProperty("os.arch") says, it says 64 because as you said, I had jRuby 64bit installed.

I went on an uninstalled jRuby and installed the 32bit jRuby version, now java.lang.System.getProperty("os.arch") prints mit an x86. I removed the previously installed service with .\CommonDeamons\prunsrv.exe //DS//App - is that enough for uninstallation? (btw it might be a good idead to add in uninstaller to your project)

After reinstalation it didn't work out, and when I looked at jruby --version it showed me that was sill using the 64-bit JVM. Therefore I uninstalled the 64-bit JVM. Now after deleting and installing the service again, the service has the correct prunserv.exe (for the first time), the path to exe displayed in Windows services is this one: c:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad_init_services-1.1.5/trinidad-libs/windows/prunsrv.exe //RS//App

I edited the service with prunmgr.exe //ES//App to set a path for log files and got the following log files:

[2012-05-09 16:24:12] [info]  Commons Daemon procrun (1.0.10.0 32-bit) started
[2012-05-09 16:24:12] [info]  Running 'App' Service...
[2012-05-09 16:24:12] [info]  Starting service...
[2012-05-09 16:24:13] [info]  Service started in 1056 ms.
[2012-05-09 16:24:24] [info]  Run service finished.
[2012-05-09 16:24:24] [info]  Commons Daemon procrun finished

stdout:

2012-05-09 16:24:12 Commons Daemon procrun stdout initialized
Daemon arguments: [c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb, -d C:\PSBuMoServer\App, -e production -p 8080]

stderr: see http://pastebin.com/1H2PN7TP

Looks to me like nothing changed :(

driehle commented 12 years ago

I modified the trinidad_init_services/configuraiton.rb file to print me the command it uses to install the service, here it is:

//IS//App3 
  --DisplayName="App3" 
  --Install=c:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad_init_services-1.1.5/trinidad-libs/windows/prunsrv.exe 
  --Jvm=auto 
  --StartMode=jvm 
  --StopMode=jvm 
  --StartClass=com.msp.procrun.JRubyService 
  --StartMethod=start 
  --StartParams="c:\\jruby-1.6.7.2\\lib\\ruby\\gems\\1.8\\gems\\trinidad_init_services-1.1.5\\lib\\trinidad\\daemon.rb;-d C:\\PSBuMoServer\\App;-e production -p 8080" 
  --StopClass=com.msp.procrun.JRubyService 
  --StopMethod=stop 
  --Classpath="c:\\jruby-1.6.7.2\\lib\\ruby\\gems\\1.8\\gems\\trinidad_init_services-1.1.5\\trinidad-libs\\jruby-jsvc.jar;c:\\jruby-1.6.7.2\\lib\\ruby\\gems\\1.8\\gems\\trinidad_init_services-1.1.5\\trinidad-libs\\commons-daemon.jar;C:\\jruby-1.6.7.2\\lib\\jruby.jar" 
  --StdOutput=auto 
  --StdError=auto 
  --LogPrefix="app3"
  ++JvmOptions="-Djruby.home=C:\\jruby-1.6.7.2;-Djruby.lib=C:\\jruby-1.6.7.2\\lib;-Djruby.script=jruby;-Djruby.daemon.module.name=Trinidad;-Djruby.compat.version=RUBY1_9"

(line breaks added for readability)

kares commented 12 years ago

everything seems just fine to me ... but I must confess I have very little Windows "power-user" experience. unfortunately, I do not have a 64-bit Windows available thus can't look into it - maybe the 32-bit binary ain't working on a 64-bit system correctly (since the same strange error message persist). did you try the other 64-bit way or have a custom prunsrv.exe binary working for you correctly ?

driehle commented 12 years ago

I uninstalled mostly everything (JVM, jRuby, Services) and installed the JVM 7 64-bit and jRuby 64-bit.

C:\PSBuMoServer>java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b22)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

C:\PSBuMoServer>jruby --version
jruby 1.6.7.2 (ruby-1.8.7-p357) (2012-05-01 26e08ba) (Java HotSpot(TM) 64-Bit Se
rver VM 1.7.0_04) [Windows 7-amd64-java]

Looks good for me. But still the error is the same and nothing works. It uses the amd64\prunsrv.exe by default now, but even if I download the binary from commons.apache.org and use regedit to specify the path to the custom binary the problem persists.

So I started hacking into trinidad_init_services a little bit more and modified the lib/trinidad/deamon.rb file like this:

    def start(args = ARGV)
      Trinidad::CommandLineParser.parse(args)
      Trinidad.configuration.trap = false
      p Trinidad.configuration
      @server = Trinidad::Server.new
      p Trinidad.configuration
      @server.start
    end

As a result I get the following lines in the log file of the service:

2012-05-10 17:38:47 Commons Daemon procrun stdout initialized
Daemon arguments: [c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb, -d C:\PSBuMoServer\App, -e development -p 8080]
#<Trinidad::Configuration:0x333861df @classes_dir="classes", @address="localhost", @log="INFO", @libs_dir="lib", @web_app_dir=" C:\\PSBuMoServer\\App", @jruby_max_runtimes=5, @default_web_xml="config/web.xml", @environment=" development -p 8080", @context_path="/", @jruby_min_runtimes=1, @trap=false, @port=3000>
#<Trinidad::Configuration:0x333861df @classes_dir="classes", @address="localhost", @libs_dir="lib", @web_app_dir=" C:\\PSBuMoServer\\App", @trap=false, @port=3000, @log="INFO", @jruby_max_runtimes=5, @default_web_xml="config/web.xml", @environment=" development -p 8080", @context_path="/", @jruby_min_runtimes=1, @web_apps={:default=>{:context_path=>"/", :web_app_dir=>" C:\\PSBuMoServer\\App", :log=>"INFO"}}>

And here comes the question: Isn't there something wrong with classes_dir and environment?

driehle commented 12 years ago

Additionally to what I wrote above, I think that this is a startup problem with Tomcat. I digged into Trinidad::Server in lib/trinidad/server.rb in the trinidad gem and modified the start method like this:

    def start
      trap_signals if @config[:trap]

      p "Before tomcat start..."
      @tomcat.start
      p "After tomcat start..."
      @tomcat.server.await
      p "After tomcat await."
    end

The last thing I get on stdout is the "Before tomcat start", then the App crashes. I'd like to have a depper look at this, but I can't find the place where Trinidad::Tomcat::Tomcat is defined (cause @tomcat = Trinidad::Tomcat::Tomcat.new is how the tomcat object is created). Can you tell me where I have to look?

kares commented 12 years ago

and trinidad starts correctly when not run as a daemon right ?

you do not need to worry about the classes_dir it's fine and only used for compiled java classes for the web-app. but the environment does look weird, seems the "Daemon arguments:" ain't parsed correctly - notice a missing coma before -p : [c:\jruby-1.6.7.2\..., -d C:\PSBuMoServer\App, -e development -p 8080]

the Trinidad::Tomcat java_imports smt like "org.apache.catalina" and there's a Tomcat (java) class defined thus you won't find the source for Trinidad::Tomcat::Tomcat as it's org.apache.catalina.Tomcat.class from tomcat-core.jar ...

is there a trinidad.yml or trinidad.rb involved within your application's config dir ?

I would concentrate on checking if the app runs fine with Trinidad and your current setup, then resolve how did the daemon arguments got messed up. I'm really sorry but don't have the time for a deeper look into the issue right now.

driehle commented 12 years ago

Well the parameter problem was quite easy to fix, but that seems like a bug in trinidad_init_services.

Screenshot ProcMGR

In this dialog of procmgr.exe there were initially the following arguments:

c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb
-d C:\PSBuMoServer\App
-e development -p 8080

I fixed that manually by adding line-braks to be like the folloowing:

c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb
-d C:\PSBuMoServer\App
-e development
-p 8080
-g DEBUG

But when I looked into the Trinidad.Configuration object after this, there are some whitespaces that I guess shouldn't be there:

#<Trinidad::Configuration:0x17a80e30 
@classes_dir="classes", 
@address="localhost", 
@libs_dir="lib", 
@web_app_dir=" C:\\PSBuMoServer\\App",
@trap=false, 
@port=" 8080", 
@log=" DEBUG",
@jruby_max_runtimes=5, 
@default_web_xml="config/web.xml", 
@environment=" development", 
@context_path="/", 
@jruby_min_runtimes=1, 
@web_apps={:default=>{:context_path=>"/", :web_app_dir=>" C:\\PSBuMoServer\\App", :log=>" DEBUG"}}>

Looking at the options for the JVM on the other tab I came up with the idea, that -e development might be wrong and maybe needs to be -edevelopment. So I modified the arguments like this:

c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb
-dC:/PSBuMoServer/App
-edevelopment
-p8080
-gDEBUG

And there you go - it works like this :)

But there is definetely a bug in trinidad_init_service. If I use the long names of the arguments like --dir C:/PSBuMoServer/App it gives me the error, that this would be an unknown command line option.

Daemon arguments: [c:\jruby-1.6.7.2\lib\ruby\gems\1.8\gems\trinidad_init_services-1.1.5\lib\trinidad\daemon.rb, --dir C:/PSBuMoServer/App, -edevelopment, -p8080, -gDEBUG]
#<OptionParser::InvalidOption: --dir C:/PSBuMoServer/App>
#<OptionParser:0x333861df @banner="Trinidad server default options:", @default_argv=["-edevelopment", "-p8080", "-gDEBUG"], @program_name=nil, @stack=[#<OptionParser::List:0x295eaf7f @atype={Object=>[/.*/m, #<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>], NilClass=>[/.*/m, #<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>], String=>[/.+/m, #<Proc:0x56a9c13f@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1511>], Integer=>[/\A[-+]?(?:0(?:[0-7]*(?:_[0-7]+)*|b[01]+(?:_[01]+)*|x[\da-f]+(?:_[\da-f]+)*)|\d+(?:_\d+)*)/i, #<Proc:0x11a7762e@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1523>], Float=>[/\A[-+]?(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:E[-+]?\d+(?:_\d+)*)?/i, #<Proc:0x3c33282e@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1530>], Numeric=>[/\A([-+]?(?:0(?:[0-7]*(?:_[0-7]+)*|b[01]+(?:_[01]+)*|x[\da-f]+(?:_[\da-f]+)*)|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:E[-+]?\d+(?:_\d+)*)?))(?:\/([-+]?(?:0(?:[0-7]*(?:_[0-7]+)*|b[01]+(?:_[01]+)*|x[\da-f]+(?:_[\da-f]+)*)|(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:E[-+]?\d+(?:_\d+)*)?)))?/i, #<Proc:0x41a26593@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1537>], /\A[-+]?\d+(?:_\d+)*/i=>[/.*/m, #<Proc:0x366913d0@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1549>], /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:b[01]+(?:_[01]+)*|x[\da-f]+(?:_[\da-f]+)*))/i=>[/.*/m, #<Proc:0x1e70fa05@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1556>], /\A[-+]?(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:E[-+]?\d+(?:_\d+)*)?/i=>[/.*/m, #<Proc:0x152f92dc@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1563>], TrueClass=>[{"-"=>false, "no"=>false, "false"=>false, "+"=>true, "yes"=>true, "true"=>true, "nil"=>false}, #<Proc:0x77456140@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1574>], FalseClass=>[{"-"=>false, "no"=>false, "false"=>false, "+"=>true, "yes"=>true, "true"=>true, "nil"=>false}, #<Proc:0x5b895852@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1578>], Array=>[/.*/m, #<Proc:0x4ae51802@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1583>], Regexp=>[/\A\/((?:\\.|[^\\])*)\/([[:alpha:]]+)?\z|.*/, #<Proc:0x24a20a63@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1593>]}, @list=[], @long={""=>#<OptionParser::Switch::NoArgument:0x1679c647 @pattern=nil, @desc=nil, @arg=nil, @short=nil, @long=nil, @block=#<Proc:0x14c86ad8@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:709>, @conv=nil>}, @short={"-"=>#<OptionParser::Switch::NoArgument:0x4c2d5b57 @pattern=nil, @desc=nil, @arg=nil, @short=nil, @long=nil, @block=#<Proc:0x35c7d3d3@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:708>, @conv=nil>}>, #<OptionParser::List:0x5223dd3a @atype={}, @list=[], @long={"help"=>#<OptionParser::Switch::NoArgument:0xd2c5d0a @pattern=nil, @desc=nil, @arg=nil, @short=nil, @long=nil, @block=#<Proc:0x5b904247@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:721>, @conv=nil>, "version"=>#<OptionParser::Switch::OptionalArgument:0x5bef7247 @pattern=nil, @desc=nil, @arg=nil, @short=nil, @long=nil, @block=#<Proc:0x4537c278@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:732>, @conv=nil>}, @short={}>, #<OptionParser::List:0x4fc077c8 @atype={}, @list=["", #<OptionParser::Switch::RequiredArgument:0x7fc3caba @pattern=/.*/m, @desc=["Web app directory path", "default: C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad_init_services-1.1.5/trinidad-libs/windows/amd64"], @arg=" WEB_APP_DIRECTORY", @short=["-d"], @long=["--dir"], @block=#<Proc:0x4d220536@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:65>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0xf32bade @pattern=/.*/m, @desc=["Rails environment", "default: "], @arg=" ENVIRONMENT", @short=["-e"], @long=["--env"], @block=#<Proc:0x4e61e6a8@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:70>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x64abfe29 @pattern=/.*/m, @desc=["Port to bind to", "default: "], @arg=" PORT", @short=["-p"], @long=["--port"], @block=#<Proc:0x3b9af1f7@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:75>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x1ed364bc @pattern=/.*/m, @desc=["The application context path", "default: "], @arg=" CONTEXT_PATH", @short=["-c"], @long=["--context"], @block=#<Proc:0x2fbccaee@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:80>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x487a8273 @pattern=/.*/m, @desc=["Directory containing jars used by the application", "default: "], @arg=" LIBS_DIR", @short=[], @long=["--lib", "--jars"], @block=#<Proc:0x43940451@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:85>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x630a7131 @pattern=/.*/m, @desc=["Directory containing classes used by the application", "default: "], @arg=" CLASSES_DIR", @short=[], @long=["--classes", "--classes"], @block=#<Proc:0x645510c5@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:90>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::PlacedArgument:0x428d7ac3 @pattern=/.*/m, @desc=["Enable secure socket layout", "default port: 8443"], @arg=" [SSL_PORT]", @short=["-s"], @long=["--ssl"], @block=#<Proc:0x1e0b71be@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:95>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::PlacedArgument:0x5676ba57 @pattern=/.*/m, @desc=["Enable ajp connections", "default port: 8009"], @arg=" [AJP_PORT]", @short=["-a"], @long=["--ajp"], @block=#<Proc:0x7c533fbf@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:101>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::PlacedArgument:0xcc3d21a @pattern=/.*/m, @desc=["Configuration file", "default: config/trinidad.yml"], @arg=" [CONFIG_FILE]", @short=["-f"], @long=["--config"], @block=#<Proc:0x5db5fbc1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:107>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::PlacedArgument:0x6a671d1b @pattern=/.*/m, @desc=["Rackup configuration file", "default: config.ru"], @arg=" [RACKUP_FILE]", @short=["-r"], @long=["--rackup"], @block=#<Proc:0x4c185bfb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:112>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x17a80e30 @pattern=/.*/m, @desc=["Public directory", "default: public"], @arg=" DIRECTORY", @short=[], @long=["--public", "--public"], @block=#<Proc:0x785f1254@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:116>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::NoArgument:0x1a3b7d72 @pattern=/.*/m, @desc=["Threadsafe mode"], @arg=nil, @short=["-t"], @long=["--threadsafe"], @block=#<Proc:0x690e47f6@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:120>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, #<OptionParser::Switch::RequiredArgument:0x37a8d4d2 @pattern=/.*/m, @desc=["Trinidad host address", "default: localhost"], @arg=" ADDRESS", @short=[], @long=["--address", "--address"], @block=#<Proc:0x25afbdc7@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:125>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x2d2c438a @pattern=/.*/m, @desc=["Log level", "default: INFO"], @arg=" LEVEL", @short=["-g"], @long=["--log"], @block=#<Proc:0x40b666bb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:129>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::NoArgument:0x35063031 @pattern=/.*/m, @desc=["display the current version"], @arg=nil, @short=["-v"], @long=["--version"], @block=#<Proc:0x48a2cd4e@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:133>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, #<OptionParser::Switch::RequiredArgument:0x2945fc29 @pattern=/.*/m, @desc=["load options for extensions"], @arg=" EXTENSION_NAMES", @short=["-l"], @long=["--load"], @block=#<Proc:0x1cbd8f1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:138>, @conv=#<Proc:0x4ae51802@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1583>>, #<OptionParser::Switch::RequiredArgument:0x31adfcea @pattern=/.*/m, @desc=["applications base directory"], @arg=" APPS_BASE_DIR", @short=[], @long=["--apps", "--apps"], @block=#<Proc:0x712f46da@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:144>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::RequiredArgument:0x15b78021 @pattern=/.*/m, @desc=["monitor file for hot deployments"], @arg=" MONITOR_FILE", @short=[], @long=["--monitor--monitor"], @block=#<Proc:0x7009665c@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:148>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, #<OptionParser::Switch::NoArgument:0x423d01aa @pattern=/.*/m, @desc=["display the help"], @arg=nil, @short=["-h"], @long=["--help"], @block=#<Proc:0x3cc5d56a@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:152>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>], @long={"dir"=>#<OptionParser::Switch::RequiredArgument:0x7fc3caba @pattern=/.*/m, @desc=["Web app directory path", "default: C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad_init_services-1.1.5/trinidad-libs/windows/amd64"], @arg=" WEB_APP_DIRECTORY", @short=["-d"], @long=["--dir"], @block=#<Proc:0x4d220536@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:65>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "env"=>#<OptionParser::Switch::RequiredArgument:0xf32bade @pattern=/.*/m, @desc=["Rails environment", "default: "], @arg=" ENVIRONMENT", @short=["-e"], @long=["--env"], @block=#<Proc:0x4e61e6a8@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:70>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "port"=>#<OptionParser::Switch::RequiredArgument:0x64abfe29 @pattern=/.*/m, @desc=["Port to bind to", "default: "], @arg=" PORT", @short=["-p"], @long=["--port"], @block=#<Proc:0x3b9af1f7@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:75>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "context"=>#<OptionParser::Switch::RequiredArgument:0x1ed364bc @pattern=/.*/m, @desc=["The application context path", "default: "], @arg=" CONTEXT_PATH", @short=["-c"], @long=["--context"], @block=#<Proc:0x2fbccaee@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:80>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "lib"=>#<OptionParser::Switch::RequiredArgument:0x487a8273 @pattern=/.*/m, @desc=["Directory containing jars used by the application", "default: "], @arg=" LIBS_DIR", @short=[], @long=["--lib", "--jars"], @block=#<Proc:0x43940451@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:85>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "jars"=>#<OptionParser::Switch::RequiredArgument:0x487a8273 @pattern=/.*/m, @desc=["Directory containing jars used by the application", "default: "], @arg=" LIBS_DIR", @short=[], @long=["--lib", "--jars"], @block=#<Proc:0x43940451@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:85>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "classes"=>#<OptionParser::Switch::RequiredArgument:0x630a7131 @pattern=/.*/m, @desc=["Directory containing classes used by the application", "default: "], @arg=" CLASSES_DIR", @short=[], @long=["--classes", "--classes"], @block=#<Proc:0x645510c5@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:90>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "ssl"=>#<OptionParser::Switch::PlacedArgument:0x428d7ac3 @pattern=/.*/m, @desc=["Enable secure socket layout", "default port: 8443"], @arg=" [SSL_PORT]", @short=["-s"], @long=["--ssl"], @block=#<Proc:0x1e0b71be@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:95>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "ajp"=>#<OptionParser::Switch::PlacedArgument:0x5676ba57 @pattern=/.*/m, @desc=["Enable ajp connections", "default port: 8009"], @arg=" [AJP_PORT]", @short=["-a"], @long=["--ajp"], @block=#<Proc:0x7c533fbf@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:101>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "config"=>#<OptionParser::Switch::PlacedArgument:0xcc3d21a @pattern=/.*/m, @desc=["Configuration file", "default: config/trinidad.yml"], @arg=" [CONFIG_FILE]", @short=["-f"], @long=["--config"], @block=#<Proc:0x5db5fbc1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:107>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "rackup"=>#<OptionParser::Switch::PlacedArgument:0x6a671d1b @pattern=/.*/m, @desc=["Rackup configuration file", "default: config.ru"], @arg=" [RACKUP_FILE]", @short=["-r"], @long=["--rackup"], @block=#<Proc:0x4c185bfb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:112>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "public"=>#<OptionParser::Switch::RequiredArgument:0x17a80e30 @pattern=/.*/m, @desc=["Public directory", "default: public"], @arg=" DIRECTORY", @short=[], @long=["--public", "--public"], @block=#<Proc:0x785f1254@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:116>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "threadsafe"=>#<OptionParser::Switch::NoArgument:0x1a3b7d72 @pattern=/.*/m, @desc=["Threadsafe mode"], @arg=nil, @short=["-t"], @long=["--threadsafe"], @block=#<Proc:0x690e47f6@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:120>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, "address"=>#<OptionParser::Switch::RequiredArgument:0x37a8d4d2 @pattern=/.*/m, @desc=["Trinidad host address", "default: localhost"], @arg=" ADDRESS", @short=[], @long=["--address", "--address"], @block=#<Proc:0x25afbdc7@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:125>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "log"=>#<OptionParser::Switch::RequiredArgument:0x2d2c438a @pattern=/.*/m, @desc=["Log level", "default: INFO"], @arg=" LEVEL", @short=["-g"], @long=["--log"], @block=#<Proc:0x40b666bb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:129>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "version"=>#<OptionParser::Switch::NoArgument:0x35063031 @pattern=/.*/m, @desc=["display the current version"], @arg=nil, @short=["-v"], @long=["--version"], @block=#<Proc:0x48a2cd4e@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:133>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, "load"=>#<OptionParser::Switch::RequiredArgument:0x2945fc29 @pattern=/.*/m, @desc=["load options for extensions"], @arg=" EXTENSION_NAMES", @short=["-l"], @long=["--load"], @block=#<Proc:0x1cbd8f1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:138>, @conv=#<Proc:0x4ae51802@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1583>>, "apps"=>#<OptionParser::Switch::RequiredArgument:0x31adfcea @pattern=/.*/m, @desc=["applications base directory"], @arg=" APPS_BASE_DIR", @short=[], @long=["--apps", "--apps"], @block=#<Proc:0x712f46da@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:144>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "monitor--monitor"=>#<OptionParser::Switch::RequiredArgument:0x15b78021 @pattern=/.*/m, @desc=["monitor file for hot deployments"], @arg=" MONITOR_FILE", @short=[], @long=["--monitor--monitor"], @block=#<Proc:0x7009665c@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:148>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "help"=>#<OptionParser::Switch::NoArgument:0x423d01aa @pattern=/.*/m, @desc=["display the help"], @arg=nil, @short=["-h"], @long=["--help"], @block=#<Proc:0x3cc5d56a@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:152>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>}, @short={"d"=>#<OptionParser::Switch::RequiredArgument:0x7fc3caba @pattern=/.*/m, @desc=["Web app directory path", "default: C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad_init_services-1.1.5/trinidad-libs/windows/amd64"], @arg=" WEB_APP_DIRECTORY", @short=["-d"], @long=["--dir"], @block=#<Proc:0x4d220536@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:65>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "e"=>#<OptionParser::Switch::RequiredArgument:0xf32bade @pattern=/.*/m, @desc=["Rails environment", "default: "], @arg=" ENVIRONMENT", @short=["-e"], @long=["--env"], @block=#<Proc:0x4e61e6a8@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:70>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "p"=>#<OptionParser::Switch::RequiredArgument:0x64abfe29 @pattern=/.*/m, @desc=["Port to bind to", "default: "], @arg=" PORT", @short=["-p"], @long=["--port"], @block=#<Proc:0x3b9af1f7@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:75>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "c"=>#<OptionParser::Switch::RequiredArgument:0x1ed364bc @pattern=/.*/m, @desc=["The application context path", "default: "], @arg=" CONTEXT_PATH", @short=["-c"], @long=["--context"], @block=#<Proc:0x2fbccaee@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:80>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "s"=>#<OptionParser::Switch::PlacedArgument:0x428d7ac3 @pattern=/.*/m, @desc=["Enable secure socket layout", "default port: 8443"], @arg=" [SSL_PORT]", @short=["-s"], @long=["--ssl"], @block=#<Proc:0x1e0b71be@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:95>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "a"=>#<OptionParser::Switch::PlacedArgument:0x5676ba57 @pattern=/.*/m, @desc=["Enable ajp connections", "default port: 8009"], @arg=" [AJP_PORT]", @short=["-a"], @long=["--ajp"], @block=#<Proc:0x7c533fbf@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:101>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "f"=>#<OptionParser::Switch::PlacedArgument:0xcc3d21a @pattern=/.*/m, @desc=["Configuration file", "default: config/trinidad.yml"], @arg=" [CONFIG_FILE]", @short=["-f"], @long=["--config"], @block=#<Proc:0x5db5fbc1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:107>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "r"=>#<OptionParser::Switch::PlacedArgument:0x6a671d1b @pattern=/.*/m, @desc=["Rackup configuration file", "default: config.ru"], @arg=" [RACKUP_FILE]", @short=["-r"], @long=["--rackup"], @block=#<Proc:0x4c185bfb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:112>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "t"=>#<OptionParser::Switch::NoArgument:0x1a3b7d72 @pattern=/.*/m, @desc=["Threadsafe mode"], @arg=nil, @short=["-t"], @long=["--threadsafe"], @block=#<Proc:0x690e47f6@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:120>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, "g"=>#<OptionParser::Switch::RequiredArgument:0x2d2c438a @pattern=/.*/m, @desc=["Log level", "default: INFO"], @arg=" LEVEL", @short=["-g"], @long=["--log"], @block=#<Proc:0x40b666bb@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:129>, @conv=#<Proc:0x1ae24648@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1506>>, "v"=>#<OptionParser::Switch::NoArgument:0x35063031 @pattern=/.*/m, @desc=["display the current version"], @arg=nil, @short=["-v"], @long=["--version"], @block=#<Proc:0x48a2cd4e@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:133>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>, "l"=>#<OptionParser::Switch::RequiredArgument:0x2945fc29 @pattern=/.*/m, @desc=["load options for extensions"], @arg=" EXTENSION_NAMES", @short=["-l"], @long=["--load"], @block=#<Proc:0x1cbd8f1@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:138>, @conv=#<Proc:0x4ae51802@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1583>>, "h"=>#<OptionParser::Switch::NoArgument:0x423d01aa @pattern=/.*/m, @desc=["display the help"], @arg=nil, @short=["-h"], @long=["--help"], @block=#<Proc:0x3cc5d56a@C:/jruby-1.6.7.2/lib/ruby/gems/1.8/gems/trinidad-1.3.5/lib/trinidad/command_line_parser.rb:152>, @conv=#<Proc:0x62377782@C:/jruby-1.6.7.2/lib/ruby/1.9/optparse.rb:1504>>}>], @summary_width=32, @summary_indent="    ">
kares commented 12 years ago

@driehle that's very najs ! thus it seems as an issue parsing command line options on windows (for whatever reason) ... we sure need to look into it

driehle commented 12 years ago

Those seem to be actually two bugs to me:

1) Setting the correct values in the registry when installing the service This is in lib/trinidad_init_services/configuration.rb in def configure_windows_service where it says

--StartParams="#{escape(@trinidad_daemon_path)};#{format_path(@trinidad_options)}"

However @trinidad_options is an string containing -e development -p 8080. I guess you need to parse the options from that string into an array and then you can use format_path on that.

2) The actual parsing of the commandline options in the trinidad package in the command_line_parser.rb Dunno whats going wrong there, but it doesn't like the long options...

kares commented 12 years ago

actually, it should be a single bug if the params are formatted right there should not be issues parsing them ... hopefully I'll made some tweaks at my fork but did not test it out on a "real" Windows yet, if you find some time please test it out ... here's the gem https://github.com/downloads/kares/trinidad_init_services/trinidad_init_services-1.1.6.gem if it's working fine I shall release it :) !

driehle commented 12 years ago

Ok. First at all I hat a problem with the JVM running out of memory, it logged Java::JavaLang::OutOfMemoryError (PermGen space). I was able to solve this issue by adding the following 4 lines to Java -> Java Options in the prunmgr.exe dialog:

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
-XX:PermSize=64m
-XX:MaxPermSize=512m

I'll try your patched version in the next days. Just another question, can I configure what tmp-folder Trinidad should use? It seems like it's using the C:\Windows\Temp folder instead of the C:\PSBuMoServer\App\tmp folder...

driehle commented 12 years ago

I actually figured out the problem - it is a problem concerning the start parameters. Currently the service is - so I guess - installed like this:

--StartParams="../path/to/deamon.rb;-d ../path/to/web/app;-e production;-p 8080"

That leads to the following display in the startup arguments textbox:

./path/to/deamon.rb
-d ../path/to/web/app
-e production
-p 8080

The problem now is that deamon tools semms to escape all start parameters (which of course is a correct behaviour) which however leads to deamon tools executing something like this:

path/to/executable.exe "./path/to/deamon.rb" "-d ../path/to/web/app" "-e production" "-p 8080"

And that is something the command line parser of trinidad (or ruby) can't handle, because e.g. "-d ../path/to/web/app" is in argv[2] but it would be correct to have "-d" in argv[2] and "../path/to/web/app" in argv[3].

So the correct configuration should look like this:

./path/to/deamon.rb
-d
../path/to/web/app
-e
production
-p
8080

That also explains why -eproduction worked in previous tests for me and -e production didn't.

driehle commented 12 years ago

Btw I suggest that you somehow use the CommandLineParser of trinidad to do some validation on the parameters during installation process.

kares commented 12 years ago

hmm, seriously this is what I lastly fixed and verified with 1bda68e3e71556fd63b6f4ed84a874489c14c68a there's already a spec that checks it behaves right see the 'trinidad_options' above it gets : https://github.com/trinidad/trinidad_init_services/commit/1bda68e3e71556fd63b6f4ed84a874489c14c68a#L1R142 are you absolutely positive you're using 1.1.6 and that the --StartParams got back wrong ?

driehle commented 12 years ago

Sorry, you're right - I still had the 1.1.5 version :-(