『改訂3版 基礎Ruby on Rails』学習エラー解決

本書での学習を進めるなかで、もし同じエラーに捕まっている方の参考になればと思いまとめました。

学習は、Windowsのローカル環境(Atom)で進めました。

# **6.3バリデーション**
**＜エラー：EmailAddressChecker＞**
-
メールアドレスの入力エラーを判定するためのコード追加。

```rb:asagao/app/models/member.rb
class Member < ActiveRecord::Base
    include EmailAddressChecker 　☚この部分が初期化されてない
    (以下省略)
```

サーバー起動後にエラーメッセージが！！
![1.png](https://qiita-image-store.s3.amazonaws.com/0/128977/8fa1b957-eced-203e-1576-eb732efe27a9.png)

**＜解決法：EmailAddressChecker＞**
-
以下の初期化ファイルを付け加える
https://github.com/oiax/asagao/blob/master/lib/email_address_checker.rb

```rb:asagao/app/lib/email_address_checker.rb
# coding: utf-8

# メールアドレスの形式をチェックする
#
# [使用法]
#   email = 'taro@xyz..jp'
#   well_formed_as_email_address(email)    # => false
module EmailAddressChecker
  # 文字列がメールアドレスの形式として正しければ true を返す。
  def well_formed_as_email_address(str)
    md = str.match(/^([^@]+)@([^@]+)$/)
    return false unless md
    local_part, domain_part = md[1], md[2]
    return false unless well_formed_as_local_part(local_part)
    return false unless well_formed_as_domain_part(domain_part)
    return true
  end

  # 自らがメールアドレスのローカルパート(@よりも前の部分)として形式的に正しければ true を返す。
  #
  # ここで採用しているルールは以下の通り:
  #   * ダブルクオートで囲まれている場合は、ダブルクオート以外の全ての文字を許す。
  #   * そうでない場合は、以下の文字だけで構成されていれば許す。
  #     * 英数字
  #     * 特殊文字 ! # $ % & ' * + - / = ? ^ _ ` { | } ~
  #     * 先頭または末尾以外のドット(.)
  #
  # (注) システムによっては、メールアドレスの形式のルールをこれよりも厳しく、
  # あるいは緩くしている場合もある。アプリケーションの使用状況に応じて、
  # 条件を追加または削除すること。
  def well_formed_as_local_part(str)
    case str
    when /^"[^"]+"$/
      true
    else
      return false if str =~ %r"[^\w#!$%&'*+-\/=?^`{|}~]"
      return false if str =~ /^\./
      return false if str =~ /\.$/
    end
    true
  end

  # 自らがメールアドレスのドメインパート(@よりも後の部分)として形式的に正しければ true を返す。
  #
  # ここで採用しているルールは以下の通り:
  #   * 英数字、ドット、ハイフンのみを含む。
  #   * ドットを必ず含む。
  #   * ドットで分割(split)してできた配列の最後の要素(トップドメイン名)は
  #     2文字以上7文字以下のアルファベット
  #   * ドットで分割してできた配列の最後以外の要素は、英数字とハイフンのみを含む。
  #     ただし、ハイフンは文字列の先頭または末尾にあってはならず、2個以上連続してはならない。
  #
  # (注) 日本語ドメイン名やIPアドレスを使用したメールアドレスには対応していない。
  def well_formed_as_domain_part(str)
    return if str.match(/[^A-Za-z0-9.\-]/)
    return unless str.match(/\./)
    names = str.split(/\./)
    return unless names.pop.match(/^[a-z]{2,7}$/i)
    names.each do |name|
      return unless name.match(/^\w+(-\w+)*$/)
    end
    true
  end
end
```

# **7.2テストの基本**
**＜エラー：modelsテスト＞**
-
モデルのテストを行うため、以下のコマンドを実行するとエラー表示がでてしまった！！

    $ ruby bin/rake test test/models/member_test.rb

**ターミナル画面でのエラー表示☟**

    Web Console is activated in the test environment, which is
    usually a mistake. To ensure it's only activated in development
    mode, move it to the development group of your Gemfile:

    gem 'web-console', group: :development

    If you still want to run it the test environment (and know
    what you are doing), put this in your Rails application
    configuration:

    config.web_console.development_only = false　☚追加コード

**＜解決法：modelsテスト＞**
-
config/application.rb ファイルに　
**config.web_console.development_only = false**　
の記述を追加して、再度実行する☟

```rb:config/application.rb
        (省略)
        # Do not swallow errors in after_commit/after_rollback callbacks.
        config.active_record.raise_in_transactional_callbacks = true

        config.action_controller.permit_all_parameters = true

        config.web_console.development_only = false　☚追加コード
    end
end
```

# **8.1 アセット・パイプライン**
**＜エラー：CoffeeScript＞**
-
CoffeeScriptファイル追加でエラー表示されてしまう！！

asagao/app/assets/javascripts/**utillity.js.coffee**☟

![2.png](https://qiita-image-store.s3.amazonaws.com/0/128977/91bfcbc7-59da-29b8-bf03-42e02f6d9c46.png)

**＜解決法：CoffeeScript＞**
-
エディタで Gemfile を開き、末尾に次の行を追加。

    gem 'coffee-script-source', '1.8.0'
ターミナルで次のコマンドを実行。

    $ ruby bin/bundle update coffee-script-source

# **8.5 エラーページの作成**
本番モードで起動させる
※Windowsでのコマンドライン操作☟

    $ set RAILS_ENV=production
    $ set RAILS_SERVE_STATIC_FILES=1
    $ ruby bin/rake secret > secret.key
    $ set /p SECRET_KEY_BASE=<secret.key
    $ ruby bin/rake assets:precompile
    $ ruby bin/rake db:setup
    $ ruby bin/rails s -e production
最後のコマンドに注目！！
   **~~ruby bin/rails s~~　⇒　ruby bin/rails s -e production**

**＜エラー：本番モード起動＞**
-
上記の操作で、コマンドラインでエラー表示になった！！

    $ ruby bin/rails s -e production
    c:/Ruby21/lib/ruby/gems/2.1.0/gems/railties-4.2.1/lib/rails/railtie/configuration.rb:95:in 
    'method_missing': undefined method 'web_console' for #<Rails::Application::Configuration:0x4d9d810> 
    (NoMethodError)
       (以下省略)
   
**＜解決法：本番モード起動＞**
-
コマンドラインにエラーの箇所が表示！！

config/application.rb の **28 行目 ☟
config.web_console.development_only = false**をコメントアウトするか、末尾に
 **if Rails.env.development?**を加える。

**＜エラー：シークレットキー＞**
-
ブラウザー画面に表示がでたが、いきなりエラー表示！！☟

![3.png](https://qiita-image-store.s3.amazonaws.com/0/128977/a82a2c66-264f-5b0a-c162-96e4aecd8fbc.png)

**＜解決法：シークレットキー＞**
-
config/secrets.yml ☟

    production:
      secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

本番モード記述の、**<%= ENV["SECRET_KEY_BASE"] %>** を消す。

    development: 
      secret_key_base:  ここの 16 進数をコピーして、消した箇所に貼り付ける。
次に、開発モードの右に書いてある 16 進数をコピーして、消した箇所に貼り付ける。
※何となく応急処置のように思えますが、とりあえず学習を進めるための解決法です。

**＜エラー：ログを調べる＞**
-
Morning Gloryのトップページでは無く、ナゼかいきなり『500 Internal Server Error』ページが表示されてしまう！！☟

---
Morning Glory TOP
**500 Internal Server Error**
システムエラーのためページが表示できません。
このサイトについてCopyright(C)Oiax Inc.2007-2015

---
**＜解決法：ログを調べる＞**
-
log/production.log ☚ログを調べる

    E, [2016-10-06T19:33:10.145831 #10452] ERROR -- : SQLite3::SQLException: no such
     table: articles: SELECT  "articles".* FROM "articles" WHERE (released_at <= '20
    16-10-06 10:33:10.132875' AND ('2016-10-06 10:33:10.132875' < expired_at OR expi
    red_at IS NULL)) AND "articles"."member_only" = 'f'  ORDER BY "articles"."releas
    ed_at" DESC LIMIT 5
上記のエラー ⇒ **no such table: articles**

つまり、articles テーブルができてないので、
 **$ ruby bin/rake db:reset RAILS_ENV=production** 
を実行。

**＜問題：CSSファイル＞**
-
本番モードで、CSSファイルが反映されない！！

**＜解決法：CSSファイル＞**
-
config/environments/production.rb☟

    config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
のコードを下記【true】に変更し、起動。

    config.serve_static_files = true

※もし、今後も新たなエラーが出たら追記していきます。
その他、上記以外にもっと良い解決法があれば、その都度更新したいと思います。
皆さんからの辛口評価などありましたら、ぜひご意見お聞かせください(^^ゞ

**[補足]**
-
Windowsのローカル環境での学習は、とにかくトラブルの連続だった。

内容は、gitでのコマンド操作ができなくなったり、コミットが消えてしまう問題などがあった。
それに、Gemfileに追記したgem 'will_paginate', '~> 3.0'がインストールできなかった。
ググれば、それなりに解決法は出てくるが、とにかく面倒だったり、その解決法では解決できなかったりで苦労しまくった。

先輩に伺ったところ、WindowsならCloud9を勧められた。

その結果、gitは問題無く操作でき、インストールできなかったgem 'will_paginate', '~> 3.0'も、すんなりインストールできた。

やはり、いろんな意味で開発にはMacが最適だと思った。
Macならローカル環境でも問題ないため、ネット環境がないところでも開発を進められるところがいいですね！！

仕事で使用するなら、15インチ型「MacBook Pro Retina」かな～。