Ruby on rails × Ubuntu × VirtualBox

この続き
http://qiita.com/junpayment/items/0bc1d7fd590e6b14da3e

基本的にこの通り行う
https://gorails.com/setup/ubuntu/16.10

## ハマりポイント

### ERROR 1045 (28000): Access denied for user 'root'@'localhost' ってなる
mysql5.7だとroot空パスは許さんみたいな事らしいのでなんか設定して解決した。

### mysqlが完全にアンインストールできない
↓のようにした
http://a-zumi.net/ubuntu-mysql-server-purge/

### 再インストールしようとするとmysql起動時にエラー
/var/log/mysql/error.log 見たらport already used だったので
netstat 確認して3306使われてたので、プロセスを殺してmysql起動

### rake db:create でエラーになる
```
Mysql2::Error: Access denied for user 'myapp_user'@'localhost' to database 'myapp_test': CREATE DATABASE `myapp_test` DEFAULT CHARACTER SET `utf8`
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "pool"=>5, "username"=>"myapp_user", "password"=>"myapp_pass", "socket"=>"/var/run/mysqld/mysqld.sock", "database"=>"myapp_test"}
rake aborted!
ActiveRecord::StatementInvalid: Mysql2::Error: Access denied for user 'myapp_user'@'localhost' to database 'myapp_test': CREATE DATABASE `myapp_test` DEFAULT CHARACTER SET `utf8`
Mysql2::Error: Access denied for user 'myapp_user'@'localhost' to database 'myapp_test'
```
#### myapp/config/database.yml 記載のDB情報だとアクセスできないのが原因。

今回は下記対応。
- database.yml にユーザ情報追加
- myapp_development, myapp_test のDBを追加。

```yaml:config/database.yml
`default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock
development:
  <<: *default
  username: myapp_user　←これ
  password: myapp_pass　←これ
  database: myapp_development
test:
  <<: *default
  username: myapp_user　←これ
  password: myapp_pass　←これ
  database: myapp_test
production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>`
```

```bash
$ sudo mysql
> CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'myapp_pass';
> CREATE DATABASE myapp_development;
> CREATE DATABASE myapp_test;
> GRANT ALL PRIVILEGES ON myapp_development.* TO 'myapp_user'@'localhost';
> GRANT ALL PRIVILEGES ON myapp_test.* TO 'myapp_user'@'localhost';
> FLUSH PRIVILEGES;
> QUIT;
```

### ホストのブラウザで表示できない
サーバ起動コマンドを下記に変えてみる。
```bash
$ rails s -b 0.0.0.0
```
### windows で rails generate model をするとエラーになる
以下のように windowsでrailsコマンドを叩いて環境と同期ということをやっているとエラーになったので対処。

```
> rails generate model User name:string email:string
ruby-2.3.3-x64-mingw32/lib/ruby/gems/2.3.0/gems/sqlite3-1.3.11-x64-mingw32/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
```

sqlite3_native.so というものがロードできないということに起因するらしい。
こちらの作業手順を参考に行った。
http://www.rexent.co.jp/blog/windows8-1%E3%81%A7ruby-on-rails%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B

・sqlite-amalgamation***.zipをDL
ここからDLしてきて、中のファイルを C:temp\ とかに展開する
http://www.sqlite.org/download.html

・soファイルのコンパイル
```
// ruby_devkitのディレクトリ上で
$ msysgit.bat
$ cd C:temp
$ x86_64-w64-mingw32-gcc -O2 -shared -o sqlite3.dll -Wl,--out-implib=libsqlite3.dll.a sqlite3.c
$ x86_64-w64-mingw32-gcc -O2 -o sqlite3.exe shell.c libsqlite3.dll.a
$ gem install sqlite3 --platform=ruby -- --with-sqlite3-include=C:/temp --with-sqlite3-lib=C:/temp
```

ここまでやると、
"rubyディレクトリ\lib\ruby\gems\2.3.0\extensions\x64-mingw32\2.3.0\sqlite3-1.3.13\sqlite3" に
sqlite3_native.so ができるので、それを下記ディレクトリにコピー

"rubyディレクトリ\lib\ruby\gems\2.3.0\gems\sqlite3-hogehoge-x64-mingw32\lib\sqlite3"
* hogehoge は使っているsqlite3 gem のバージョン番号

さらに Gemfileに下記追加
```
gem 'wdm', '>= 0.1.0' if Gem.win_platform?
```

### モデルのテストでエラー
このRAILS_ENV=test でマイグレートしろとのことなのでそうする。
```
bin/rails db:migrate RAILS_ENV=test
```

### `require': cannot load such file -- bcrypt_ext (LoadError)
Gemfileにも書いてるし、個別でgem install してもダメ系なのは
path-to-ruby\lib\ruby\gems\2.3.0\gems\bcrypt-3.1.11-x64-mingw32\lib 以下にバージョンに合うsoファイルが無い場合が多い。

参考：
https://www.alib.jp/entries/bcrypt_ext_load_error_on_ruby21x


手順：

```bash
> cd ruby-dev-kit-path
> msys.bat
  → msys.batターミナルが起動
> cd path-to-ruby/lib/ruby/gems/2.3.0/gems/bcrypt-3.1.11-x64-mingw32/ext/mri
> ruby extconf.rb
> make
　→ bcrypt_ext.soができるのでそれを当該gemのlibへコピー
```