Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
FrogApps 技術ブログ始めました! RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps RailsでiOSなどのアプリ用のサーバを作ると、JSONを出力するAPIを作ることになると思います。 そのJSON APIを使って、HTMLをレンダリングするRackモジュールを作ってみました。 これを使うことで、Railsがモデルとコントローラ層、Rackでビュー層という風に別れます。 Railsのビューより機能は劣りますが、A/Bテストを仕込むなど、なにか手を加えたいときには全体が把握しやすく、Railsのバージョンにも依存しなくなるというメリットがあります。 =begin # This file is used by Rack-based servers to start the application. require :
Rackアプリケーションのプロファイリングをしたくて、preftoolsを使ったりしてみたのですが、なかなかちょうど良い粒度で出力されず困っていました。 実効速度は爆遅になるのが難点だけれど、標準profileライブラリはいい感じの粒度なので、Rackミドルウェアにしてみました。 これをどこかでuseすれば、どうにかなります。 require "profile" require "logger" require "stringio" class Profile #= initialize def initialize(app) @app = app @logger = Logger.new('log/profile.txt') end #= call def call(env) log_profile(env) { @app.call(env) } end def log_profile(
rack-protection とは,Sinatra 関連のコンポーネント (sinatra-contrib など) を多数作ってる rkh 氏のプロダクトの一つで,Rack に組み込むだけでいくつかの脆弱性に対する防御をしてくれる Rack middleware です。 いかがかなと思うコンポーネントもありますが,基本的にそういうのはデフォルトで無効化されてますし,FrameOptions や XSSHeader のように「とりあえず入れといても副作用ないし実効性がある」コンポーネントも多いので,とりあえずいれとくというスタンスでもよいのではないでしょうか。 使い方 ざっくりと省略。 とりあえず説明ページにあるように,config.ru に書く場合, な感じで使うことになります。この Rack::Protection を use すると,バンドルされているコンポーネント (middlew
この middleware ちゃんと動いてるか確認したい、とか、この middleware とこの middleware を同時に使うとなんかヘッダがおかしいけどどうなってるの!とか、そういうののデバッグ法。 単にログ吐く middleware を stack の途中に積めばよい。 @app.call の前後でそれぞれロギングできる。 class M def initialize(app) @app = app end def call(env) warn '='*80 env.each do |k,v| warn "#{k}=#{v}" end warn '='*80 triplet = @app.call(env) warn triplet.inspect triplet end end config.middleware.insert_before Rack::ETag, M con
私は自作Webアプリケーションの公開にHerokuを利用しています。Ruby on Rails tutorialにHerokuデプロイの入門編があり、最初はこれで勉強しました。 http://railstutorial.jp/chapters/beginning?version=4.0#top Ruby on Railsで開発している場合はこの本の通りにやればできます。しかし(昔のレンタルサーバのように)単純に静的なHTMLをアップしたい場合が逆に分かりません。Railsではstaticディレクトリに送れば可能ですが、わざわざこのためにRailsを使うのはいくら何でも重すぎる感じがします。 Sinatraを使えばずっと身軽になると思いますが、私はSinatraについてよく知りません。 ここではRackを使う方法を紹介します。RackはRuby on Railsのコアモジュールに採用されてお
require File.join(File.expand_path(File.dirname(__FILE__)), 'rack/timeout') if defined? Rails case Rails::VERSION::MAJOR when 2; Rails.configuration.middleware.insert 0, Rack::Timeout when 3 class Rack::Timeout::Railtie < Rails::Railtie initializer("rack-timeout.insert-rack-timeout") { |app| app.config.middleware.insert 0, Rack::Timeout } end end end # encoding: utf-8 require 'rack/timeout' requir
Sinatraとかでいつも忘れるのでメモ Rack::Requestのenvの仕様は以下のような感じになる RackのEnvironmentによるとHTTP_で始まる値がHTTPリクエストヘッダ 形式としてはRFC 3875 - The Common Gateway Interface (CGI) Version 1.1に準拠している HTTP ヘッダフィールド名が大文字に変換され、存在する全ての - が _ に置換され、先頭に HTTP_ が与えられる なので、以下のような感じでダンプ出来る(人間がわかれば良ければ1行目をpするだけでも良さそう) http_headers = request.env.select { |k, v| k.start_with?('HTTP_') } headers = http_headers.inject({}) do |a, (k, v)| a[k.s
はじめに 3月頃,『【Rails】RSpecでWeb APIのテストでハマったところ①』という初心者丸出しな記事を書きました. あれから9ヶ月ほど,お仕事としてRailsに触れたりしたため知見・スキルも向上してきたと思います. そして今,前述の記事を見直したところ恥ずかしくて顔を覆いたくなる感じになったので改めてWeb APIのテストについて書いていきます. APIのテスト? そもそもWeb APIのテストはどこに書くの?ってところからですが… Controller SpecではなくRequest Specに書いていきます. Use RSpec Request Specs Since we’ve established that we’ll be using Rack::Test to drive the tests, RSpec request specs make the most s
概要 webアプリでとあるパスへのリクエストをフックしてゴニョゴニョする。 そんな方法ないかなぁと思っていたらタイムリーな記事を見つけた。 開発環境でのみ、リクエスト毎になんか処理をフックしたい in Ruby しかしrack middlewareってどんなもの?状態なので勉強からスタート。 rack middlewareの簡単なお勉強 Rackミドルウェアの作り方を勉強した ここみたら何となく分かった。 簡単なmiddlewareを書いてみる /hogeにアクセスが来たら、"hogehoge"を返すmiddleware。 元のアプリに/hogeの処理が定義してあっても、その処理を通さずにクライアントへ結果を返す。 そんなmiddlewareを書いてみた。 class MyRackMiddelware def initialize(app) @app = app end def call(
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く