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'
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のマスタテーブルを参照しているため、叱られていた。
- 20160617063944_create_entries.rb
- 20160620063943_create_mst_categories.rb
解決方法
マイグレートファイルの名前を修正し、正しい順番でマイグレートが当たるように修正する。
- 20160620063943_create_mst_categories.rb
- 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をインストールする
なにがしたい
失敗
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チェックマークにチェックを入れないといけない模様。
解決策
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
Realm|1.0がリリース!
ついに!
ついにRealm1.0がリリースされました!
ついに!やったー!と思って、issueまで切って意気揚々とライブラリーのバージョンをあげようとしたのです。
そこで起こる悲劇
Podfileをpod 'RealmSwift' , '~> 1.0'
のように編集し、pod install
すると大量のエラーが...
プロジェクトをcleanしても直らない。Xcodeを再起動しても直らない。
そこで再度Realmの公式ページを確認すると、
Xcode 7.3 or later required.
まじか。
Xcode 7.3 が必要ということは、OSをEl Capitanにしなければならないということで。
今の環境では敵が多すぎる...
OSを上げて、かつXcodeのバージョンも上げないとできることに制限がかかるようになってきたので、
そろそろいろいろ上げていかないといけないな(´・ω・`)