Trinidad + “SEVERE: A child container failed during start”
If you’re using Trinidad to run your JRuby/Rails application and you get SEVERE: A child container failed during start its likely that the JVM isn’t getting enough memory. Maybe you’re using Spring and a host of other jars that your application relies upon. You can get around this by running:
# shell jruby -J-Xmx1024m -S trinidad
So how do you do this in a production environment? You could of course pass along the same command line options, or for better configuration management you can use the Trinidad Daemon extension.
# ./Gemfile ⋮ gem 'trinidad' gem 'trinidad_daemon_extension' gem 'trinidad_logging_extension' # optional, hah! who're we kidding? ⋮
And then some configuration options:
# ./config/trinidad.yml jruby_max_runtimes: 1 # also enables threadsafe by convention libs_dir: lib # by default this is lib/jars - but if you're coming from Warbler you might be accustomed to /lib extensions: logging: # logging always a good idea config: lib/resources/log4j.properties logging_system: log4j daemon: jvm_args: '-Xmx1024m'
Now just jruby -S trinidad for your production environment or your dev workstations and the configuration environment will be the same. And if you’ve setup everything correctly you can still be rails s which also means your Spork/Guard/RSpec world will continue to function as well.