経緯
Rails Tutorialをやっていて、ローカルやHerokuではちゃんと動作するのにIBM Bluemixではそのままデプロイできませんでした。
manifest.ymlやコマンドの実行などで上手くいっていないと思いきや、ログをちゃんと見てみるとデータベースの問題でした。hello appではデータベースを使っていなかったため、かなり盲点となってはまりました。
結果的には、Gemfileで以下の設定がされていました。(抜粋)
group :development, :test do
gem 'sqlite3', '1.3.9'
end
group :production do
gem 'pg', '0.17.1'
end
Herokuではsqliteが使用できないようなので、hello appではデータベースを使わないのに、データベースをpostgresに変更しています。しかしdatabase.ymlにデフォルトのデータベースとしてsqliteを設定しているため、sqliteをロードしようとして、エラーになっていたようです。
Herokuではtoy appでもdatabase.ymlは変更していないので、そこは見ていないということなのでしょうか。
とりあえずIBM Bluemixでデプロイするときは、sqliteをインストールするようにGemfileを変えたら動きました。
group :development, :test do
# gem 'sqlite3', '1.3.9'
end
group :production do
# gem 'pg', '0.17.1'
end
gem 'sqlite3', '1.3.9'
- 2016/6/29追記
cf pushでローカルのコードを直接アップロードしていたため、何度か試して上手くいかないことがあったので追記します。
.bundle/config
に、
BUNDLE_WITHOUT: production
が設定されていたため、Bluemixにアップロードされる時に、configもアップロードされ、productionグループの部分がインストールされませんでした。私の場合は、そこにsqliteを記載されていなかっためインストールされずデータベースの部分でエラーとなっていました。
gitリポジトリを作成して、.gitignoreに.bundle/configを設定して、gitのリポジトリ経由でアップロードすれば回避できたと思います。