Ruby on Rails環境構築メモ② - Ruby on Railsのインストール、初期設定

# Ruby on Rails環境構築メモ

**目次**
① [rbenv,ruby,mysqlのインストール](http://qiita.com/Esfahan/items/1a497fe75405561ef433)
② ruby on railsのインストール
***

## Ruby on Rails環境構築メモ② - Ruby on Railsのインストール

## railsのインストール

```
$ mkdir project
$ cd project
$ bundle init
Writing new Gemfile to /path/to/project/Gemfile
```

Gemfileの`gem "rails"`の部分のコメントアウトを外す。

```lang:Gemfile
$ vi Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem "rails"
```

- bundle install

```
$ bundle install --path vendor/bundle
$ bundle exec rails new -d mysql .

Overwrite /home/user/project/Gemfile? (enter "h" for help) [Ynaqdh]Y
```
Overwriteは`Y`を押して許可してください。


## Gemfile

下記を追記してbundle install

```Gemfile
# unicorn
gem 'unicorn'

# bootstrap
gem 'less-rails'
gem 'twitter-bootstrap-rails'
gem 'therubyracer', platforms: :ruby

# haml
gem 'haml-rails'
gem 'erb2haml'

# paging
gem 'kaminari'

group :development, :test do
  gem 'dotenv-rails'
end
```

```
$ bundle install --path vendor/bundle
```


## bundle installでエラーが出る場合
こんなエラーが出ることがありますが、`gem install nokogiri`を実行しても解決しません。

```
An error occurred while installing nokogiri (1.8.4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.8.4' --source 'https://rubygems.org/'` succeeds before bundling.
```
以下を実行すると解決します。

```shell-session
$ bundle config --local build.nokogiri --use-system-libraries
You are replacing the current local value of build.nokogiri, which is currently nil
```
参考：[Bundlerでビルドオプションを指定する](https://qiita.com/thunders/items/101c6b329830fb1fb27d)


## haml適用
scaffoldで生成されるviewファイルがhamlで生成されるようにする

テンプレートをhamlに変換

```lang:bash
$ bundle exec rake haml:replace_erbs
```

これでscaffoldすれば、viewがhamlで生成される

```lang:bash
$ bundle exec rails g scaffold Hoge name:string age:integer
```

## bootstrap適用

bootstrapのインストール

```lang:bash
$ bundle exec rails g bootstrap:install
```

Hogeアプリケーションのviewを、bootstrapが適用されたものに書き換え。
既存のviewファイルが上書きされますので、既にviewに変更を加えている場合は気をつけてください。

```lang:bash
$ bundle exec rails g bootstrap:themed Hoge
```

`Overwrite ～? (enter "h" for help) [Ynaqdh]Y`
が出たらすべて`Y`で許可する。

#### form submit時のエラー表示変更
下記をconfig/application.rbに追記

```config/application.rb
config.action_view.field_error_proc = proc { |html_tag, instance| "<div class='has-error'>#{html_tag}</div>".html_safe }
```

参考：[Railsで自動で挿入されるエラー出力タグ `<div class="field-with-errors"></div>`の変更](http://qiita.com/kawahiro311/items/e48c53c978d27a9192cc
)

## その他

scaffold削除

```lang:bash
$ bundle exec rails destroy scaffold Hoge
```

## autoload, locale設定

libs, validatorsディレクトリがautoloadされるようにし、
localeを日本語にする。

```config/application.rb
    # libs
    config.autoload_paths += %W(#{config.root}/lib)
    # validators
    config.autoload_paths += %W(#{config.root}/app/validators)

    # locale
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
    config.i18n.default_locale = :ja
```

## localeファイル作成

localeファイルの作成

### activerecord用

```config/locales/ja.yml
# conifg/locales/ja.yml
ja:
  activerecord:
    models:
      hoge1: hoge1一覧
      hoge2: hoge2一覧
    attributes:
      hoge1:
        id: id
        entry_id: entry_id
        name: 名前
        age: 年齢
        description: メモ
        enabled: 有効/無効
        created_at: 作成日
      hoge2:
        id: id
        entry_id: entry_id
        name: 名前
        age: 年齢
        description: メモ
        enabled: 有効/無効
        created_at: 作成日
```

viewで下記の用に記述するとそれぞれ使用できる。

```views/hoge/index.html.haml
model_class.human_attribute_name(:name)
```

### localeファイルを分離する

ja.yml以外にファイルを生成しても、autoloadされる。
下記は、ja.global_menu.ymlを作成する例。

```config/locales/ja.global_menu.yml
# conifg/locales/ja.menu.yml
ja:
  global_menu:
    title: 'hoge管理画面'
    li:
      hoge1: 'hoge1一覧'
      hoge2: 'hoge2一覧'
```

viewで下記の用に記述するとそれぞれ使用できる。

```views/hoge/global_menu.html.haml
t('global_menu.title')
t('global_menu.li.hoge1')
t('global_menu.li.hoge2')
```

以上。

[参考]
[システムのgemにrailsをインストールせずrails newする](http://qiita.com/youcune/items/222777415f00d19cccb4)
[設定ファイル内のパスワード等を環境変数で隠すための How to 色々](http://qiita.com/ka_/items/a19f65628bdc213fc8f5)