プログラミングガール

Developing a better me

Rails|エラーページのカスタマイズ

なにがしたい

エラーページをいい感じにカスタマイズしたい。

HOW TO

1. view配下にerrorsディレクトリを切り、「error_404.html.erb」と「500.html.erb」を作成 2. application_controller.rbに下記を記述

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  rescue_from ActionController::RoutingError, with: :render_404
  rescue_from Exception, with: :render_500

  # 404ページをレンダリング
  def render_404(exception = nil)
    if exception
      logger.info "Rendering 404 with exception: #{exception.message}"
    end
    render template: "errors/error_404", status: 404, layout: 'application'
  end

  # 500ページをレンダリング
  def render_500(exception = nil)
    if exception
      logger.info "Rendering 500 with exception: #{exception.message}"
    end
    render template: "errors/error_50x", status: 500, layout: 'application'
  end
end

3. route.rbの最後に下記を記述 その上に書かれているパス以外のリクエストが来たら、404ページに遷移させます。

 get '*path', to: 'application#render_404'

Vagrant|There are stopped jobs.

困ったこと

vagrantからログアウトしようと思った際、下記の文言がでて、ログアウトできなくなった。

There are stopped jobs.

解決方法

どうやら、vagrantから抜け出す前に、中断中のプロセスをKillする必要があるらしい。

$ ps aux|grep {{ ログイン名 }}
…
vagrant   5694  0.0 24.1 922264 246000 pts/1   Tl   11:35   0:10 /home/vagrant/.rbenv/versions/2.3.0/bin/ruby bin/rails s -b 0.0.0.0
$ kill -9 5694

Rails|Cannot add foreign key constraint エラー対処

困ったシチュエーション

後でマスターテーブルを追加しようとした際、以下のエラーに遭遇。

Mysql2::Error: Cannot add foreign key constraint: ALTER TABLE `application_forms` ADD CONSTRAINT `fk_rails_386b13f566`

え、どういうこと?

原因

マスターテーブルを後から作成したため、以下の順でマイグレートが当たっていた。
しかし、1のentriesテーブルで2のマスタテーブルを参照しているため、叱られていた。

  1. 20160617063944_create_entries.rb
  2. 20160620063943_create_mst_categories.rb

解決方法

マイグレートファイルの名前を修正し、正しい順番でマイグレートが当たるように修正する。

  1. 20160620063943_create_mst_categories.rb
  2. 20160621063944_create_entries.rb

Java|クローラーかどうか判別する

なにがしたい

サイトへアクセスしたユーザーエージェントがクローラーのものか判断する。

実装

/**
 * 例外対応するクローラーUAリスト
 */
public static final ArrayList<String> CRAWLER_UA = ImmutableList.of("Googlebot", "Yahoo!", "bingbot", "Yeti", "Baidu", "YandexBot");

// クローラUAの判定
if (isNotCrawlerUa(userAgent, crawlerUas)) {
    // アフィリエイトリダイレクト
    StringBuilder redirectUrl = new StringBuilder(AFFILIATE_SERVER_URL);
    redirectUrl.append(URLEncoder.encode(Base64Util.encode(requestUrl.toString().getBytes()), ENCODE_UTF8));
    ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    ((HttpServletResponse) response).setHeader("Location", redirectUrl.toString());
} else {
    ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    String redirectUrl = requestUrl.toString().replaceAll("([^=/]+)-(\\d{3})[/]*$", "");
    ((HttpServletResponse) response).setHeader("Location", redirectUrl);
}

/**
 * クローラーUA判定メソッド
 * クローラーでなければTrueを返却
 */
public boolean isNotCrawlerUa(String userAgent, List<String> crawlerUas) {
    for (String crawlerUa : crawlerUas)
        if (userAgent.toLowerCase().contains(crawlerUa.toLowerCase())) {
            return false;
        }
    return true;
}    
            

CentOS6系にOracleのJavaをインストールする

なにがしたい

wgetCentOSJavaをインストールしたい。

失敗

wgetしようとするもののあえなく失敗。

$ wget http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm
$ sudo rpm -ihv jdk-7u75-linux-x64.rpm
error: open of jdk-7u75-linux-x64.rpm failed: No such file or directory

どうやらWeb上のAcceptチェックマークにチェックを入れないといけない模様。
f:id:hana_ori:20160609190258p:plain

解決策

wget時にチェックマークを入れるには、以下のようにします。

$ wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm
$ yum install jdk-7u79-linux-x64.rpm

Github|Wikiに画像をのせる

なにをしたい

GithubWikiに画像をのせたい。

こんな感じ↓
f:id:hana_ori:20160605161628p:plain

How To

  1. Wikiをclone してくる f:id:hana_ori:20160605161930p:plain
  2. clone してきたら、image/ディレクトリを切り、その配下に画像を格納する
  3. img タグを書き、画像を表示させる
<img src="https://github.com/repository/wiki/images/S__15982629.jpg" width=200px>

Realm|1.0がリリース!

ついに!

ついにRealm1.0がリリースされました!

realm.io

ついに!やったー!と思って、issueまで切って意気揚々とライブラリーのバージョンをあげようとしたのです。 f:id:hana_ori:20160604165510p:plain


そこで起こる悲劇

Podfileをpod 'RealmSwift' , '~> 1.0'のように編集し、pod installすると大量のエラーが...
プロジェクトをcleanしても直らない。Xcodeを再起動しても直らない。

そこで再度Realmの公式ページを確認すると、
f:id:hana_ori:20160604170111p:plain

Xcode 7.3 or later required.

まじか。
Xcode 7.3 が必要ということは、OSをEl Capitanにしなければならないということで。
今の環境では敵が多すぎる...
f:id:hana_ori:20160604172258p:plain

OSを上げて、かつXcodeのバージョンも上げないとできることに制限がかかるようになってきたので、
そろそろいろいろ上げていかないといけないな(´・ω・`)