DockerでALB2を動かす

Post date: 2014/09/15 9:32:32

1. phusion/passenger-ruby20 をdocker run

この中には、nginxとpassengerが入っている

2. このコンテナにALB2をgit cloneし、bundle install --deployment

その前に apt-get updateし、apt-get install libicu-dev する必要あり

問題点: gem install debuggerでエラーになる

phusion/passenger-ruby20は、versionが 2.0.0p384なのだが、ruby-core-source.gemというgemが、p384に対応してない。暫定対応として、/home/anagix/work/alb2/vendor/bundle/ruby/2.0.0/gems/debugger-ruby_core_source-1.3.5/lib/debugger/ruby_core_source/ruby-2.0.0-p353に、ruby-2.0.0-p384という

シンボリックリンクを張る必要がある

あとで要るので apt-get install mysql-client しておく

3. docker psで、ALB2コンテナのIDを調べる

docker commit (コンテナID) anagix/alb2 で新しいイメージができる

4. docker pull sameersbn/mysql:latest で、mysqlコンテナをもってくる

mkdir -p /opt/mysql/data したあとで、mysqlコンテナを起動

docker run --name mysql -d -v /opt/mysql/data:/var/lib/mysql sameersbn/mysql:latest

5. 以下のコマンドで mysql のIPアドレスを調べる

docker inspect mysql | grep IPAddres | awk -F'"' '{print $4}'

6. mysqlに接続して、alb_productionデータベースを作成する

7. config/database.ymlに、host: (mysqlのIPアドレス)と port: 3306 を入れる

export RAILS_ENV=production & bundle exec rake assets:precompile

(これをやっとかないと、railsを動かしたとき、/home/anagix/work/alb2/app/views/tablibs/auto/rapid/cardsがないのでエラーになる)

8. bundle exec alb2 -e production実行

/home/anagix/work/alb/public/systemが、/usr/local/anagix_tools/alb/systemへのシンボリックリンクになっていたので、削除した

参考:

DockerでアプリケーションとMySQLをコンテナ化してRedmineを構築する

メモ:

1. /usr/local/anagix_tools/alb2を入れた場合、bundle exec rails s -e productionすると以下のエラーが出た

/usr/local/anagix_tools/alb2/config/kernel_hack.rb:10:in `require': libffi.so.5: cannot open shared object file: No such file or directory - /usr/local/anagix_tools/alb2/vendor/bundle/ruby/2.0.0/gems/ffi-1.9.3/lib/ffi_c.so (LoadError)

なぜこうなるかは分からないが(bundle exec gem uninstall ffi libyajl2 ffi-yajl ohai chefして入れ直しても

同じだった)、暫定対策としては、/usr/lib/x86_64-linux-gnu において、ln -s libffi.so.6 libffi.so.5 した。

2. production.sqlite3をデータベースに使い、config/database.ymlを変更したので、mysql2は使われないと思ったが、

Gemfileに記述があると読み込まれ、以下のエラーがでる:

/usr/local/anagix_tools/alb2/config/kernel_hack.rb:10:in `require': libmysqlclient_r.so.16: cannot open shared object file: No such file or directory - /usr/local/anagix_tools/alb2/vendor/bundle/ruby/2.0.0/gems/mysql2-0.3.16/lib/mysql2/mysql2.so (LoadError)

暫定対策として、Gemfile.lockからmysql2をコメントアウトした

3. charlock_holmes gemをもともとCentOS6でインストールしたためか、以下のエラーがでる:

/usr/local/anagix_tools/alb2/config/kernel_hack.rb:10:in `require': libicudata.so.42: cannot open shared object file: No such file or directory - /usr/local/anagix_tools/alb2/vendor/bundle/ruby/2.0.0/gems/charlock_holmes-0.7.3/lib/charlock_holmes/charlock_holmes.so (Loa\

dError)

暫定策として、bundle exec gem uninstall charlock_holmesして入れ直した。(ubuntuのlibicu-devは、Qt5ベースかも知れない。)

結論としては、このpassengerの入ったコンテナはubuntuベースなので、alb2をgem installも含めてubuntuベースで作り直すべき。