2010-11-23 4 views
4

Ich versuche, als Service auf meinem Webserver dünn zu laufen. Folgendes lief wird Running Rails Apps mit Thin als Service

thin start --all /etc/thin
Dieser scannt alle yaml Konfigurationsdateien Nach dem Ausführen von „sudo dünn installieren“, dünn erstellt die folgende Datei in /etc/init.d/thin

#!/bin/sh 
DAEMON=/usr/local/lib/ruby/gems/1.9.1/bin/thin 
SCRIPT_NAME=/etc/init.d/thin 
CONFIG_PATH=/etc/thin 

# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

case "$1" in 
    start) 
     $DAEMON start --all $CONFIG_PATH 
     ;; 
    stop) 
     $DAEMON stop --all $CONFIG_PATH 
     ;; 
    restart) 
     $DAEMON restart --all $CONFIG_PATH 
     ;; 
    *) 
     echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2 
     exit 3 
     ;; 
esac 

Wenn der dünne Dienst gestartet wird, definieren wie man für jede definierte App dünn wird. Das funktioniert nicht.

ich in meinem Logs sehen:

/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler/runtime.rb:27:in `block in setup': You have already activated eventmachine 0.12.6, but your Gemfile requires eventmachine 0.12.11. Consider using bundle exec. (Gem::LoadError) 
    from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `block in each' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler/spec_set.rb:12:in `each' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler/runtime.rb:17:in `setup' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.0/lib/bundler.rb:100:in `setup' 
    from /srv/app/current/config/boot.rb:8:in `<top (required)>' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from /srv/app/current/config/application.rb:1:in `<top (required)>' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from /srv/app/current/config/environment.rb:2:in `<top (required)>' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from /srv/app/current/config.ru:3:in `block in <main>' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.2.1/lib/rack/builder.rb:46:in `initialize' 
    from /srv/app/current/config.ru:1:in `new' 
    from /srv/app/current/config.ru:1:in `<main>' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/rack/adapter/loader.rb:36:in `eval' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/rack/adapter/loader.rb:36:in `load' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/rack/adapter/loader.rb:45:in `for' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:163:in `load_adapter' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:67:in `start' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/bin/thin:6:in `<top (required)>' 
    from /usr/local/lib/ruby/gems/1.9.1/bin/thin:19:in `load' 
    from /usr/local/lib/ruby/gems/1.9.1/bin/thin:19:in `<main>' 

Wenn Capistrano entfaltet, ich mein Bündel am Cachen in dem $ APP_PATH/shared/Bündel-Verzeichnis; so erklärt dies, warum dünne Edelsteine ​​beschwert sich über nicht wie der dünne Service im $ APP_PATH/shared/Bündel nicht

Arbeit Das sieht installiert:

cd $APP_PATH/current; bundle exec thin start -d -C /etc/thin/app_x.yml 

aber das ist nicht die Art und Weise ist die dünne Servicedatei in /etc/init.d/thin funktioniert. Ich denke, ich könnte mein eigenes schreiben. Ich will nur ein Problem, das bereits gelöst wurde, nicht lösen.

+0

beachten Sie, dass der Fehler nicht über ein Juwel ist, das nicht installiert ist. Das Problem ist, dass activemachine zwei Mal für verschiedene Versionen aktiviert wird, und die vorgeschlagene Lösung besteht darin, die Bundle-Exec so auszuführen, wie Sie es tun. –

+0

VP, ja. Es scheint, dass Thin Start - all der vorhandenen Bundle-Cache der Anwendung nicht bekannt ist. –

+0

Ich habe etwas, das funktioniert, auf das ich nicht stolz bin. https://gist.github.com/712690 –

Antwort

1

Ich kam auf diese, aber ich fühle mich nicht wie es die beste Lösung, da sie nicht den Vorteil des dünnen des nehmen „--all“ Option, wo es die Konfigurationsdateien aus einem Verzeichnis liest. Stattdessen habe ich die Datei geändert, die den Thin Service startet/stoppt/neu startet, so dass ich für jede App einen spezifischen Befehl zum Starten/Stoppen/Neustarten gebe. Ich bin mir sicher, dass dieser Befehl verbessert werden könnte, aber jetzt funktioniert es für meine Bedürfnisse.

#!/bin/sh 

# This is a pretty bad, but effective workaround for starting thin as a service per application. 

DAEMON=/usr/local/lib/ruby/gems/1.9.1/bin/thin 
# DAEMON=/usr/local/bin/bundler thin 
SCRIPT_NAME=/etc/init.d/thin 
CONFIG_PATH=/etc/thin 

# Exit if the package is not installed 
[ -x "$DAEMON" ] || exit 0 

case "$1" in 
    start) 
    cd /srv/hub/current && bundle exec thin start -d -C /etc/thin/hub.yml 
    ;; 
    stop) 
    cd /srv/hub/current && bundle exec thin stop -d -C /etc/thin/hub.yml 
    ;; 
    restart) 
    cd /srv/hub/current && bundle exec thin restart -d -C /etc/thin/hub.yml 
    ;; 
    *) 
    echo "Usage: $SCRIPT_NAME {start|stop|restart}" >&2 
    exit 3 
    ;; 
esac