LoginSignup
6
8

More than 5 years have passed since last update.

IBM Bluemixのデータベースを使う(Rails Tutorial のtoy appをデプロイする)

Last updated at Posted at 2016-07-02

やりたいこと

Rails TutorialをやっているとHerokuを標準で使います。しかし今後Webアプリを公開していく上で、Herokuだと無料運営ができなさそうなので、無料運営可能なIBM Bluemixにもデプロイしたい。
Rails Tutorial のhello appをIBM Bluemixにデプロイしようとしてはまった件で、hello appのデプロイまでできたので、次はtoy app。何が違うかというとデータベースを使う点。Herokuでは特に意識せずにできたけれど、IBM Bluemixでもデータベースを使って、Ruby on Railsの開発を行いたい。

注意事項ですが、IBM Bluemixは日々変化しています。私がもたもた検証している間でも、ログイン画面が変わったりしました。内部的にも色々変わっているかも。。。そのため古い情報になっている可能性があることを認識下さい。
私もインターネットで調べたりしましたが、古い情報で提供されているサービスもかなり違っているようでした。そのため昔はできたけど、今はできない。その逆もかなりあると思います。

実験

IBM Bluemixのサービス(PostgreSQL by Compose)でpostgresqlのデータベースを使う(無料では不可)

  • Herokuと同じpostgresqlを使えばそのままtoy appをデプロイできるはず
  • IBM BluemixにあるPostgreSQL by Composeのサービスを追加して、バインド
  • 接続情報は自動で生成
  • 結果はエラー
  • 問題は「by Compose」。ComposeはDBaaS(DataBase as a Service)で、データベース本体はComposeにある(Composeではデータベースを作っていなかった)
  • PostgreSQL by Composeは、Composeのデータベースに接続するだけ
  • Composeのpostgresqlは、30日は無料だけど、その後は有料
  • 元々の目的の、無料で運営が不可になるので、却下

sqliteでデータベースを使う(不可)

  • sqliteはgemの設定とdatabase.ymlの設定だけで簡単に使えるはず
  • development環境ではsqliteを使っているので、production環境も同じにする
  • 結果はエラー(接続エラー) Instance (index 0) failed to start accepting connections
  • Herokuでもsqliteは使えないように、IBM Bluemixでも使えないよう
  • おそらくPaaSだとファイルシステムに自由に書き込まれるのは問題があるから?

IBM Bluemixのサービス(dashDB)でdashDBのデータベースを使う(最終的に成功)

  • dashDBは無料で提供されている
  • gemのibm_dbをインストールすれば使える(Gemfileに追加)
  • dashDBのサービスを追加して、バインドすれば接続情報も自動で作成
  • 結果はエラー(以下の事を解決することで成功しました)

Railsのproduction環境のデータベースの基本

  • db:migration時に、オプションを付ける ~~RAILS_ENV=production~~
  • デフォルトはdevelopmentのため

dashDBはclob型がない

  • Railsでテーブル項目の型をtextにしているとclob型でテーブルを作成する
  • dashDBにはclob型がないためエラー
  • ibm_dbはDB2用のgemのため、DB2の型になるよう
  • textをstringに変更して対応

方法

  1. toy appを作成する
  2. Gemfileにibm_dbを追加(productionのグループ) gem 'ibm_db'
  3. db/migrateのmicropostのマイグレーションファイルのtextをstringに変更
  4. rakeコマンドをつけてcf push(なぜかエラー。次の手順コマンドを削除して再起動すると起動します) cf push --command "bundle exec rake db:migrate"
  5. コマンドを削除 cf push --command ""

感想

使ったことのあるsqlite,postgresql,mysqlなどがよかったのですが、今回初めてdashDBを使いました。型の部分は、暫定対応なのですが、ibm_dbがDB2用に提供されている限り、dashDBはどうすることもできないのか。。。しかし無事接続できてよかったです。
ここには記載してないですが、試行錯誤の中ではdatabase.ymlを変えてみたり、manifest.ymlを変えてみたりと色々試しました。最終的に必要な部分だけをまとめましたが、IBM Bluemixの仕様も絡むところが多く、整理が必要だと感じています。
Railsも勉強中の上、IBM Bluemixの仕様もあるので問題の切り分けに時間がかかりましたが、こうやって試行錯誤していくうちに、それぞれの仕様が理解できていくので、よい経験だと思います。

未解決事項

cf push するときに必ず出るエラーがあります。
- Cloning into '/tmp/buildpacks/ruby-buildpack'..
- Cloning into 'compile-extensions'...
- 下記manifest.ymlに記載ある、cloudfoundryのbuildpackだと出るようです。Bluemix標準のを使うと出ませんでした。
- ただBluemix標準のものだとibm_dbのgemがちゃんとインストールされず、cloudfoundryのだとインストールされて動きました。

他にもcf push するときに rake db:migrate のコマンドなどを入れると違うエラーが出たり。。。もう少し調べる必要があると思っています。

使ったmanifest.yml
manifest.yml
applications:
- name: app-name
host: app-name
domain: au-syd.mybluemix.net
buildpack: https://github.com/cloudfoundry/ruby-buildpack
instances: 1
memory: 128M

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8