「いつもの」が結構ありそうなので書いておく。 app.rb ペラ 1 でツラくなったときの対策はだいたい sonots パイセンの ちっちゃくはじめておっきく育てる sinatra アプリの作り方 に書いてあって、これは今でも有効なので読んでおくと良いです。 ディレクトリ構成 REPO ├── app.rb ├── bin/ ├── config/ │ ├── database.yml │ ├── initializers/ │ └── locales/ ├── config.ru ├── Gemfile ├── Gemfile.lock ├── helpers/ ├── models/ ├── public/ └── views/ sinatra らしさをなるべく残してある 例えば config/boot.rb を用意するかは非常に悩んだのだけれど、起点は app.rb であって欲しい
端末からスクリーンショットをPCにアップロードしたいことがあって、でもAndroidのBluetoothとかよくわからないし…というときに、手軽に立ち上げられるようなアップローダを作った。 github.com $ curl -sL https://raw.githubusercontent.com/a2ikm/uploader/master/uploader.rb | ruby - [-p PORT] [-u DIRECTORY] なお、事前にRubyとbundler/inlineが使えるBundler(v1.16以上)を入れておく必要がある。 きっと車輪の再発明だろうけど、bundler/inlineやSinatraでサクッと作れたので面白かった。 追記 git.ioで短縮URLを作成したので、そちらでも起動できるようになった。 $ curl -sL https://git.io/up
注:rack 1.3.3以前だと落ちます。rack 1.3.4以上にアップデートしましょう。 Sinatra 1.3でstreamヘルパーが追加された。 require "rubygems" require "sinatra" get '/' do stream do |out| out << "It's gonna be legen -\n" sleep 0.5 out << " (wait for it) \n" sleep 1 out << "- dary!\n" end end get '/normal' do sleep 1.2 "normally response" end 全部の処理が終わるまで待って一気にレスポンスを返すのではなく、out << "string"のように逐次レスポンスを返す。なお、これの実装はRails 3.1で追加されたものやPHPのデフォルトの挙動、Tw
以前書いたようにSinatraのstreamはTransfer-Encoding: chunkedじゃないので微妙に使い勝手が悪い。 そこでchunkedレスポンスを返すようなモンキーパッチを書いた。 # -- coding: utf-8 require "pp" require "rubygems" require 'sinatra' require 'sinatra/base' set :server, :thin module Sinatra module Helpers class Stream def each(&front) @front = front callback do @front.call("0\r\n\r\n") end @scheduler.defer do begin @back.call(self) rescue Exception => e @schedu
rack-protection とは,Sinatra 関連のコンポーネント (sinatra-contrib など) を多数作ってる rkh 氏のプロダクトの一つで,Rack に組み込むだけでいくつかの脆弱性に対する防御をしてくれる Rack middleware です。 いかがかなと思うコンポーネントもありますが,基本的にそういうのはデフォルトで無効化されてますし,FrameOptions や XSSHeader のように「とりあえず入れといても副作用ないし実効性がある」コンポーネントも多いので,とりあえずいれとくというスタンスでもよいのではないでしょうか。 使い方 ざっくりと省略。 とりあえず説明ページにあるように,config.ru に書く場合, な感じで使うことになります。この Rack::Protection を use すると,バンドルされているコンポーネント (middlew
RubyKaigi 2014行った。良い発表がいろいろ聞けたんだけど、最近ISUCONに向けてwebアプリのチューニングに興味があったので特にfinal keynoteが興味深かった。 その中で紹介されていたtmm1/rblineprofが行ごとの実行時間を表示してくれるのでとても便利そうだったんだけど、GitHubではpeek/peek-rblineprofというRails用のプラグインでrblineprofを活用しているので、ISUCONでおそらく使用されるであろうsinatraでどうやって使うか考えていた。 kainosnoema/rack-lineprofというgemがその用途に便利そうだったので紹介したい。 使い方 rack-lineprofはRack middlewareで、まず以下のようにuseする必要がある。 require 'rack-lineprof' class My
エクスキューズとか 正直な話をすると、Webフレームワーク自体に関する興味は以前に比べて失われてきているので、最新のSinatraの細かいコミットまでは追っていない。 だが、2年強ほど Sinatra/Padrino 界隈を追いかけてきて得た知見と言うか考えについてまとめるのは一定の価値がある、少なくとも自分に取っての価値は非常に大きいと思うのでここに書いていきたい。 副次的には、ミスコンセプトによってSinatraを利用して、結果必要の無いイメージの悪化を招く事態を一件でも減らせればと思う。 Sinatraはmicroframework、あるいは「フレームワークではない」 公式の説明にある通りである。 具体的にどういうことかと言うと、Sinatra単体ではウェブサービスに必要な要件を満たさないかもしれないと言う話である。Sinatraが持っていないものについては、Sinatra以外の場所
Sinatra::Base + Thin doesn't show request path and response time. You can show response time by writing this class and modifying your run line in your config.ru 日本語 Sinatra と Thin 使うと、レスポンスタイム出してくれないから、Rack の run に渡すクラスに、一つオブジェクトを挟めてレスポンス返すまでの秒数を計測するクラスを書いた。 config.ru に Stats クラスを書き込んで、run の行をちょっといじれば表示してくれます。
Steve @ DynamicEdge Computer science in the real world. (Ruby, Rails, Semantic Web, Who knows…) We love Sinatra. Not only does it make a great framework in its own right but in addition it can be used to mimic parts of rails in a real simple environment for front-end designers. Instead of having to get them set up and explain the whole of rails they just get a nice simple app to work on without ha
nodeのSocket.ioっぽい物のRuby版を作った。 https://github.com/shokai/sinatra-rocketio 依存 EventMachineが有効なWebサーバー(thinとか)と、jQueryが必要。 Rubyは1.8.7〜2.0.0まで動く。 Sinatraで使う インストール gem install sinatra-rocketio ブラウザとか回線に応じてWebSocketとCometの使える方が自動的に選ばれる。 切断されても定期的に再接続を試みるようになってる。 sinatraに読みこむだけで使える。sinatraのプロセス内にwebsocketサーバーも組み込まれる。 require 'sinatra' require 'sinatra/rocketio' modular styleではclass内でregisterすればok class
以前書いたものの続きです。 rspecと同様ほとんど変りはありません。と言ったら違うか。。 サンプルコード require './hello_world' require 'capybara' require 'capybara/dsl' require 'test/unit' class HelloWorldTest < Test::Unit::TestCase include Capybara::DSL # Capybara.default_driver = :selenium def setup Capybara.app = Sinatra::Application.new end def test_it_works visit '/' assert page.has_content?('Hello World') end end コードの理解 capybaraを使う場合は capy
2013/03/09, 21:10 UTC Almost Sinatra 2013/03/08, 08:35 UTC Reloading Ruby Code 2010/08/30, 19:06 UTC Strengths and Weaknesses of Seaside 2010/08/25, 19:14 UTC the book open source Classy web-development dressed in a DSL Travis CI Free Hosted CI for the Open Source Community Rack A modular Ruby webserver interface Rubinius An environment for the Ruby programming language And a lot more on GitHub me
RABLのDSLわからんヽ(Д´)ノ((object`ってなに…)) ってなってるので、tilt-jbuilderをforkしてSinatraで動くようにした。 sinatra-integrationというブランチを切ったので、Gemfileに次のように記載するとSinatraでもJbuilderが使えるようになる。 # Gemfile gem "tilt-jbuilder", git: "git@github.com:a2ikm/tilt-jbuilder.git", require: "sinatra/jbuilder", branch: "sinatra-integration" たとえばこんな感じ: get "/" do jbuilder :foo # renders `views/foo.jbuilder` end get "/partial" do jbuildder "jso
まず読め http://www.sinatrarb.com/extensions.html Sinatra::Base を直接いじるな。あらゆるSinatraアプリケーションに影響があってきついので、ことモジュラースタイルでは明示的にregisterさせること Extension内部で直接 require 'sinatra' するとモジュラスタイルでサーバが立ち上がり沢山の悲しみが生まれるので、require 'sinatra/base' しなさい http://www.sinatrarb.com/extensions.html に書いてあるAPIだけをできるだけ使え。直接Sinatraのコアクラスにモンキーパッチとかは勘弁 ExtensionはSinatraのnamespace配下で、moduleとして定義される べきだ 。例えば、基本認証を有効にするようなやつなら Sinatra::B
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く