【Rails】Wercker で mysql を使う時に出会ったエラー一覧とその対処
自分開発でCIを使おうと思って、Werckerを入れた。無料だし、プライベートリポジトリでも使えるので便利!
で、デフォルトのsqliteからmysqlに変えようと思って設定したら、いろんなところで躓いたのでそのメモを残しておこうと思う。
最終的に出来上がったのはこんな感じ。
※ 最初の MYSQL_DATABASE
などは config/database.yml の test の設定に合わせています。
box: ruby
services:
- id: mysql
env:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_USER: testuser
MYSQL_PASSWORD: testuser
MYSQL_DATABASE: testdb
build:
steps:
- script:
name: set nodejs emvironment
code: |
sudo apt-get update
sudo apt-get -y install nodejs npm
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
- script:
name: bundle - nokogiri use sys lib
code: bundle config build.nokogiri --use-system-libraries
- bundle-install
- rails-database-yml
- script:
name: DB schema load
code: bundle exec rake db:schema:load RAILS_ENV=test
- script:
name: rspec
code: bundle exec rspec
以下、いろいろやっていく過程で出たエラーとその対処を書いていきます。
There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
gem に therubyracer を入れるか、nodejsを使うかどちらからしい。今回はWerckerにnodejsを入れてみた。
- script:
name: set nodejs emvironment
code: |
sudo apt-get update
sudo apt-get -y install nodejs npm
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
Gemfile にtherubyracerを入れるのでも大丈夫っぽい(試してないです...すみません)
gem 'therubyracer'
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error)
MySQLとの接続がうまく行ってないみたい。
config/database.yml の設定がうまく行ってない?と思ったんですが、werckerでの設定が必要みたいだったので、以下のように設定を追加しました。
- rails-database-yml
Array values in the parameter to `Gem.paths=` are deprecated.Please use a String or nil.
このエラー、よく見ると以下の2箇所が気になった。
cannot load such file -- bundler/setup (LoadError)
Migrations are pending. To resolve this issue, run:
bin/rake db:migrate RAILS_ENV=test
これなんだろうな??と思いつつ、2つ目のものは見慣れたエラーなので、こっちを片付けようと思って wercker上で実行する設定を追加。
- script:
name: DB schema load
code: bundle exec rake db:schema:load
ActiveRecord::AdapterNotSpecified: 'development' database is not configured. Available: ["test"]
走ってるっぽいけど、development を読み込もうとしているようなので環境変数を設定。(上記に RAILS_ENV=test を追加)
- script:
name: DB schema load
code: bundle exec rake db:schema:load RAILS_ENV=test
上記設定で無事 Wercker が動きました。サックリ動かせると思ったのに予想外のところでハマって時間を使った。でも勉強になった!!
【追記 4/29】
今まで動いてたのに、いきなり動かなくなったりすることがある。
そういうときは Wercker 上でのキャッシュが悪さをしていることがあるみたい。なので、Werckerのページに行って、右上の【Settings】→【Clear Cache】で動くことがある。これでダメだったら別のことが原因。