スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

thin + ActiveRecord + Oracleの注意点

Railsではなかったけど、Rack対応でWebアプリを作った。
↓みたいなthin.ymlを書いてthin -C thin.yml startでWebアプリ起動。

pid: /var/run/rack/thin.pid
log: /usr/local/rack/logs/thin.log
servers: 3
rackup: /usr/local/rack/webapps/config.ru
daemonize: true
user: rack
group: rack
debug: true

で、アクセスすると、

!! Unexpected error while processing request: ORA-12154: TNS: 指定された接続識別子を解決できませんでした
ORA-12154: TNS: 指定された接続識別子を解決できませんでした
env.c:257:in oci8lib.so
/usr/lib/ruby/site_ruby/1.8/oci8.rb:229:in `initialize'

みたいなエラーが出た(thin.ymlに debug: true を追加するとログに出力される)。

原因はthinのプロセス名に半角括弧があること。

# ps -ef
で見ると、こんな感じ↓ (赤字部分の半角括弧がいけない)
rack     18934     1 15 20:11 ?        00:00:00 thin server (0.0.0.0:3000)


thinがデーモンとしてあがった時のプロセス名を決めてるのが
/usr/lib/ruby/gems/1.8/gems/thin-1.2.2/lib/thin/server.rb
(thinのバージョン、インストールした環境によって違う)
の197行目付近のこれ↓。

# Name of the server and type of backend used.
# This is also the name of the process in which Thin is running as a daemon.
def name
"thin server (#{@backend})" + (tag ? " [#{tag}]" : "")
end
alias :to_s :name

これをこんな風に変更↓

# Name of the server and type of backend used.
# This is also the name of the process in which Thin is running as a daemon.
def name
#"thin server (#{@backend})" + (tag ? " [#{tag}]" : "")
"thin server"
end

これでWebアプリが正常動作した。

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/268-5711010c

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。