質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

2182閲覧

passenger 下で rails アプリを稼働させている場合、 url に % を指定したときのエラーを制御したい。

katoy

総合スコア22324

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2014/10/17 22:47

passenger をつかって rails アプリを稼働させている場合、
http://localhost:3000/users?x=%
にアクセするすると
** ArgumentError in UsersController#index**
invalid %-encoding (%)
のエラー画面が表示されてしまいます。
ここで 自分で設定したエラー画面を出すようにしたいのですが、それができずに困っています。
![イメージ説明]WIDTH:600

このエラーが発生した際に自分で設定したエラー画面を出すようにする方法を教えてください。

https://github.com/katoy/sample-errors に試行中のものを置きました。
これは以下のような作業をしたものです。

  • $ rails new sample -T

  • Gemfile に 追加。
    gem 'passenger'

  • $ rails g scaffold user nmae:string tel:string email:string
    で user 処理を生成。

  • config/routes.rb に追加。
    get '*not_found' => 'application#render_404'

  • app/controller/applicatin_controller にエラーハンドリングを少し追加。

  • app/views/errors/ に エラー表示用のファイルを追加。

  • config/envirionments/development.rb に追加。
    config.action_controller.action_on_unpermitted_parameters = :raise

  • $ passenger start で passenger をつかって rails アプリを稼働させる。

備考:

  • $ rails s で webrik で稼働させた時は、passenger での稼働時とは異なるエラーになります。

可能なら、この場合も自分で設定したエラー画面を出したいです。
(passenger, webrik での稼働に依存しないエラー制御ができるのが好ましい)

  • 以下の URL を参照して、いくつか試行錯誤してみていますが 上手くできていません。(手法が不適なのか、手法の適用方法時の不備なのか...)

http://dev.mensfeld.pl/2014/03/rack-argument-error-invalid-byte-sequence-in-utf-8/
http://blog.ericrafaloff.com/how-to-break-most-rails-apps.html
http://qiita.com/jnchito/items/caa12cbac013ed6a2f34
https://gist.github.com/joost/ca4eda8f31655cf6095a
http://stackoverflow.com/questions/24648206/ruby-on-rails-invalid-byte-sequence-in-utf-8-due-to-bot
https://github.com/rails/rails/issues/11662

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

とりあえず、現時点での自己回答を。

次のようにすることで、 passenger start で起動してから、http://localhost:3000/users?x=% にアクセスしたときに 自作のエラー画面を出せるようにできました。
![イメージ説明]WIDTH:450
1. rack mddleware として、URL の書式をチェックするものを top に積むようにした。
2. その rack middleware からは、エラーを検出した場合には、 render_anywhere をつかって、エラー画面を出力する。
参考: render_anywhere https://github.com/yappbox/render_anywhere

実装コードは以下にあります。
https://github.com/katoy/sample-errors/commit/9f2f3a407e0d921b9db8e84700cf4645fa1

この実装へのコメント や もっとよい別の方法があれば、お知らせください。

投稿2014/10/20 20:41

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問