読者です 読者をやめる 読者になる 読者になる

SDカード領域でbundlerからthinを起動する時のはまりポイント

bundleでインストールしたgemsファイルは下記のように実行できるわけですが

bundle exec thin start

SDカード領域に保存した場合、thin実行時にthin_parser.soのアクセスに失敗するというケースがありました。

root@microserver:/media/sdcard/app# bundle exec thin start
/media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/lib/thin_parser.so: /media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/lib/thin_parser.so: failed to map segment from shared object: Operation not permitted - /media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/lib/thin_parser.so (LoadError)
        from /media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/lib/thin.rb:40
        from /media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/bin/thin:5:in `require'
        from /media/sdcard/app/gems/ruby/1.8/gems/thin-1.3.1/bin/thin:5
        from /usr/bin/thin:19:in `load'
        from /usr/bin/thin:19

なんだろ?と思って調べた所、UbuntuなのかLinuxの制限なのかファイルシステムがFAT32の場合に発生する現象ということがわかりました。Shellでよく利用するシンボリックリンク作成時も同様の「Operation not permitted」エラーが発生します。

fdiskを使ってSDカードをFAT32からext3に初期化しなおす事で、bundlerのexecで実行したthinでも起動できるようになりました。

デジカメなどストレージ利用を目的としたSDカードならFAT32のままでもよいのですが、常にマウントしてファイルシステムとして利用するなら無難にext3にしておいた方がよさそうです。