SALADこの広告は、90日以上更新していないブログに表示しています。Pipelineを使う方法が良さそうだったのでまとめます。追記(2015/08/17)このエントリで提案した手法をgem化し、その使い方を解説したエントリを書きました。よろしければこちらもご一読ください。以下、元エントリになります。背景Railsはproduction環境などでエラーが発生するとpublicディレクトリ下の404.htmlなどを表示するという仕組みを標準で用意しています。単純でとてもいいと思うのですが、ただのhtmlなので以下のような辛みがあります。テンプレートエンジンが使えないpublic/assets以下のファイルを利用できないヘッダーやフッターを共有(部分テンプレートが利用)できないこれらの問題を解決策のひとつとして、config.exceptions_appを使ってごにょごにょすることで、動的にエラーページを生成して返すという方法があります。詳しくは以下の投稿(とコメント)を参照して下さい。動的生成の限界@keenさんが指摘するように、動的にエラーページを生成する手法では、メンテナンス時の503ページなどに対応できないという限界があります。これ最大の問題は、rails落とすメンテ時の503とかRackの400とか、nginxが直接かえすstaticなページの需要が必ず残るので、動的だけでは足りなくて、同じ仕組みで静的ファイル生成も必要ってとこよねぇ。assetのリンク切れ問題もあったり。使用するテンプレートエンジンを登録するapp/assets/templatesのようなディレクトリを作り、そこにエラーページを書くassets:precompileをフックして、実行後にエラーページをpublic配下に移す以下、順番に説明していきます。使用するテンプレートエンジンを登録する例えばslimを使いたい場合、config/initializers/assets.rbに次の行を追加します。Slim::Template)app/assets/templatesにエラーページを書く別にディレクトリ名はなんでもいいんですが、僕はapp/assets/templatesという名前にしました。このディレクトリに次のようなエラーページを書いておきます。image_tag('404.png')assets:precompile実行後にエラーページをpublicディレクトリ下に移すlib/tasks/assets.rakeのようなファイルを作成して、assets:precompileの実行後にエラーページをpublicディレクトリ下に移す処理を書きます。assets:precompileを実行するようにすればOK。デメリット上でも述べたように、(renderメソッドが使えないので)ヘッダーやフッターのような共通のテンプレートを読み込むことができないことに加え、修正時に表示を確認するのが面倒くさい*1、というところでしょうか。後者ですが、エラーページはそこまで頻繁に修正されることはないと思うので、許容範囲なのかなあと思っています。おわりにこれをgemに組み込んで、各microserviceでエラーページを共通化するというのが本当にやりたかったことだったりする。HsbtDiary(2012-02-10)*1:railsを開発環境で立ち上げて/assets以下にアクセスするだけなんだけど、それをデザイナーさんにやってもらうときの手間を考えると...って話です。»プロフィールid:YasaichiWeb周りの話や開発環境改善の備忘録がメインのBlogです。FunctionAsObject注目記事はてなブログをはじめよう!Yasaichiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。