グロースエンジニアのブログ

Ruby on Rails エンジニアです!開発に当たって勉強したことをまとめていこうと思います!

【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】で動くことがある。これでダメだったら別のことが原因。

f:id:ikdtty0423:20160429092045p:plain