Problem

会社での話ですが、OS起動後、Thin_RedmineThin_Redmine2 が停止していることがある。
何故だかは不明ですが、BitNamiインストール配下のruby関係のファイルが壊れているために、ruby関係であるthinが起動しない模様。

ただ、膨大な数のruby関係のファイルから壊れているファイルだけを探すのは至難の業。
そのための問題を見つける手段。

Solution1

スタートメニューからBitnami Redmine Stack を使用する を起動し、コマンドプロンプトを立ち上げます。
それで、どこでもいいので、bundle を実行できるフォルダに移動します。
多分、htdocsが最短。

1
2
$ cd apps\redmine\htdocs
$ bundle exec rake tmp:cache:clear

と実行します。
この時、rbファイルgemspecファイル 壊れていると、rubyが動かないので、

1
C:\BitNami\redmine-3.2.2-0\ruby\lib\ruby\gems\2.1.0\specifications\default\json-1.8.1.gemspec:2: invalid multibyte char (UTF-8)

のように該当するファイルがエラーを吐きますので、正常なファイルと置き換えます。

Solution2

Windows版のthinは -log オプションが使えません。
apps\redmine\htdocs\vendor\bundle\ruby\2.1.0\gems\thin-1.6.1-x86-mingw32\lib\thin\runner.rb 内の下記の記述を見てください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
unless Thin.win? # Daemonizing not supported on Windows
opts.separator ""
opts.separator "Daemon options:"

opts.on("-d", "--daemonize", "Run daemonized in the background") { @options[:daemonize] = true }
opts.on("-l", "--log FILE", "File to redirect output " +

"(default: #{@options[:log]})") { |file| @options[:log] = file }
opts.on("-P", "--pid FILE", "File to store PID " +

"(default: #{@options[:pid]})") { |file| @options[:pid] = file }
opts.on("-u", "--user NAME", "User to run daemon as (use with -g)") { |user| @options[:user] = user }
opts.on("-g", "--group NAME", "Group to run daemon as (use with -u)") { |group| @options[:group] = group }
opts.on( "--tag NAME", "Additional text to display in process listing") { |tag| @options[:tag] = tag }

opts.separator ""
opts.separator "Cluster options:"

opts.on("-s", "--servers NUM", "Number of servers to start") { |num| @options[:servers] = num.to_i }
opts.on("-o", "--only NUM", "Send command to only one server of the cluster") { |only| @options[:only] = only.to_i }
opts.on("-C", "--config FILE", "Load options from config file") { |file| @options[:config] = file }
opts.on( "--all [DIR]", "Send command to each config files in DIR") { |dir| @options[:all] = dir } if Thin.linux?
opts.on("-O", "--onebyone", "Restart the cluster one by one (only works with restart command)") { @options[:onebyone] = true }
opts.on("-w", "--wait NUM", "Maximum wait time for server to be started in seconds (use with -O)") { |time| @options[:wait] = time.to_i }
end

Windowsでは、サポートしていない旨があります。
ここを改造しても無駄です。

実際にログを吐く処理と思しき、apps\redmine\htdocs\vendor\bundle\ruby\2.1.0\gems\thin-1.6.1-x86-mingw32\lib\thin\daemonizing.rb に、

1
2
3
def daemonize
raise PlatformNotSupported, 'Daemonizing is not supported on Windows' if Thin.win?
raise ArgumentError, 'You must specify a pid_file to daemonize' unless @pid_file

とあるので、無意味でしょう。

なので、ログではなく、**–debug** オプションを使います。
で、一度サービスを停止し、Bitnami Redmine Stack を使用する を立ち上げます。
そして、

1
$ "<InstallDir>\ruby\bin\ruby.exe" "<InstallDir>/apps/redmine\htdocs\bin\thin" start -p 3001 -e production --debug -c "<InstallDir>\apps\redmine\htdocs" -a 127.0.0.1 --prefix /redmine 2> F:\thin_debug.log

と実行し、しばらくしてから、Ctrl+Cで停止します。2> が重要です。
するといっぱいログがファイルに吐き出されるはずですので、原因がつかめるかもしれません。