DockerでALB2を動かす

2014/09/15 2:32 に 森山誠二郎 が投稿   [ 2014/10/28 0:54 に更新しました ]
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へのシンボリックリンクになっていたので、削除した

参考: 
   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ベースで作り直すべき。
Comments