最近使っている人を多く見るようになった、イケてるRubyのWebアプリケーションフレームワークPadrino。 これの開発を自分もはじめたいと思ったのでした。
そのためにはまず下記を円滑にできる必要があります。
ここは開発をはじめるにあたって、一番スムーズにいきたいところです。なぜなら、はじめてさわるおっかなびっくりな状態で、どこから手を付けたらわからないとか、なんかうまくいかないとかってなると大いに出鼻をくじかれてしまうからです。
そんなことぐらい自分で解消しろよと凄腕たちは言うかもしれないけれど、逆にそんなことでこれからの人が離脱してしまうのは非常にもったいない。そう思ってしまうのでした。
最低限下記が必要です。
つまりは、https://github.com/padrino/padrino-framework からgit cloneします。
github for macを入れたのちに ブラウザで https://github.com/padrino/padrino-framework を開いて、「Clone in Mac」ボタンを押してて手元にcloneするのが楽チンでした。 CLI派の人はterminalからgit clone ほげほげとタイプするといいとおもいます。
padrino-frameworkは数個のサブプロジェクトで構成されていて、それぞれ別のgemとして扱えるようになっています。
すべてを理解しないといけないわけではなく、いわゆるWeb Application Frameworkとしては、padrino-core、padrino-helpersを注視するといいでしょう。
つまりは、bundlerを入れた後bundle installします。
which bundlerと叩いてbundlerがあることを確認し、なければgem install bundlerして、bundlerを入れてください。
cloneした先のディレクトリでbundle installを実行し、Gemfileに記述されたpadrino-frameworkが必要としているgemを入れましょう。 bundle install --path vendor/bundleとオプション付きで実行し、padrino-frameworkに必要なものはpadrino-framework内のvendor/bundleディレクトリに押し込めるのが好みです。
つまりは、テストを実行するrakeタスクがあるのでこれを実行します。
cloneした先のディレクトリで、bundle exec rake testを実行すると、全サブプロジェクトのテストが実行されます。 もしサブプロジェクトを個別にテスト実行したいときは、当該サブプロジェクトのディレクトリでbundle exec rake testすればよいです。
padrino-cacheのtest_stores.rbで、redisにつながらないよ!ってエラーがでてテストが異常終了してしまうでしょう。 安心してください。何も悪くありません。大丈夫です:-)
/Users/t-koshiba/dev/padrino-framework/vendor/bundle/ruby/2.0.0/gems/redis-3.0.3/lib/redis/client.rb:276:in `rescue in establish_connection': Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED) (Redis::CannotConnectError)
(中略)
from /Users/t-koshiba/dev/padrino-framework/padrino-cache/test/test_stores.rb:88:in `<top (required)>'
テストコードをみると、redisがなければredisまわりのテストをskipするような記述がありますが、LoadErrorが起きないとskipしないんですね。require時にそのgemがなければLoadErrorになるのですが、接続ができないだけだと次に進んでいってしまいます。 テストの事前条件を書く前にあえて接続を試しているので、接続できなければskipしたかった意図を感じますが、そういう動きになっていません。
そこで、https://github.com/padrino/padrino-framework/pull/1088/files というパッチをつくったので当ててみてください。 LoadErrorが起きるか接続に失敗するならば、テストをskipします。
もちろん本気でpadrino-cacheのテストを行いたければmemcached, redis, mongoなど、padrinoで対応しているサーバを立ち上げてきちっと繋ぐ必要がいずれ必要になるでしょう。それまではきちんとスキップしてやるのがベターだとおもってます。 実際、mongoはサーバに繋がらなかったらその部分のテストをスキップするという流れにすでになっていました。
なおこの部分、そもそもmemcachedだのredisだのを直接サポートするのではなく、いずれ https://github.com/padrino/padrino-framework/pull/1018 でMonetaによるキャッシュストアのインターフェイス共通化がなされるので大きくテストコードも書き換わるのですが、マイルストーンをみるにもう少し先のバージョンまで待つ必要がありそうです。
これで開発ができる状態=テストが通る状態をになりました!思うままかいていきましょう。
Dashingというgemを使って簡単に実現できます。
2秒ぐらいデモサイトをみればどんなんか一目でわかると思います。
手軽です。Getting Startedの記述に、dashingのプロジェクトを作りましょう。 dashingのプロジェクトを作ったらすでにサンプルが動作できます。
動きを追いかけたいなら、作ったプロジェクトのdashboardsやjobsの中にいつもどおりp仕込んだり、pry仕込んだりしてみましょう。
dashingプロジェクトの下には、下記のようなディレクトリが作られます。
assets dashboards jobs lib widgets
widgetsに予めいろんなダッシュボードのウィジットが入ってます。コメント表示用ウィジットとか、値表示用ウィジットとか、グラフ表示ウィジットとか色々あります。
dashboardsにダッシュボード定義を置きます。ダッシュボードにはどういうレイアウトでどのウィジットを配置するか、ウィジットにどういうデータをはめ込むかを書きます。
jobsディレクトリに置いたジョブから、ウィジットにはめ込むデータを吐き出してやります。
「Getting Data Into Your Widgets」の通り、SCHEDULER.everyが引数の周期でぐるぐる実行され、そのたびにsend_eventメソッドによって、キーと値(となるハッシュ)がウィジットに吐き出されます。 ウィジットとジョブとは、data-idとsend_eventの第一引数とで紐付いています。
だいたいはgithub上のREADMEの通りに動かしたら大丈夫!
数点tipsがあるので書き留めておきます。(todo: あとでREADMEへのpull req送る)
環境はMacBookAir(Late2010)&snow leopardで確認したものになります。
rubyまわりの他に、mongoとPygmentizeがあれば各コンテンツを編集・確認できるようになりました。
2012/06/01現在、1.8.7で動かせました。1.9.3は動かず。
homebrewで入れる。
easy_installで入れる。
getaddrinfo: nodename nor servname provided, or not known
って言われた人挙手(´Д`)ノ
--traceオプション付きで動かしてスタックトレース見ればわかるように、ユーザ作りましたメールが送れないよといってるだけです。 なので、config/apps.rbのset :delivery_method, :smpt〜 ってところを、set :delivery_method, :test としてsmtpサーバにつながないようにしましょう。
Ruby、rvm(or rbenv)、homebrew、gitは入ってるものとして。
#rubyは1.8系を利用 rvm use ruby-1.8.7-p330 gem install bundler # mongodbの導入 sudo mkdir /usr/local/var/log/mongodb #何も指定しなければmongoさんにこのディレクトリを求められた&一般ユーザではディレクトリが作れなかったため brew install mongodb # Pygmentsの導入 easy_install Pygments # padrino-web-jaソースを入手し、gemを入れる。ホームディレクトリのしたにディレクトリを掘る。 cd ~ git clone https://bash0C7@github.com/udzura/padrino-web-ja.git cd padrino-web-ja bundle install --path vendor/bundle/ # mongoの起動 mongod run --config /usr/local/etc/mongod.conf # config/apps.rbの書き換えて、smptサーバに繋がらないようにする ## (前述の通り) # 初期データ投入 bundle exec padrino rake seed #途中で初期ユーザ作成を行うプロンプトがでるので、適当なものを入力。外に影響でないのでご安心を。 # 起動 bundle exec padrino start
http://developer.aiming-inc.com/ci/rails-bestpractices-in-jenkins/ のエントリーにそって、自分のところでもrails_best_practiecsの結果をJenkinsでグラフ書くように設定しました。
rakeタスクとしてrails_best_practiecsを実行してグラフのインプットデータを作るところを動かしたくなったので、https://gist.github.com/1173288 をforkしてみました。
https://gist.github.com/2730772
rake rails_best_practices:jenkins_plot_plugin
という様に実行できます。 rakeなので動かし方を忘れても、rake -Tでリストアップしてくれるのが便利です。
単にrails_best_practicesを入れて動かすだけで、Padrinoでもちゃんとチェック書けてくれました。 せっかくなのでこちらもrakeタスクとして実行できるようにしました。
https://gist.github.com/2730797
動かし方はPadrinoなので、
padrino rake rails_best_practices:jenkins_plot_plugin
とすれば動きます。 rails3版との差異はRails.rootがPadrino.rootにしているだけです。
とても嬉しかったので書き残しておく。 書いたコードをOSSに取り込んでもらったのは初めてというのと、とてもびっくりなコメントをいただいたので、本当にびっくりです。
https://github.com/elight/rb-skypemac/pull/2
Small world! You gave the "Let's Go Shibuya Rubyist Lunch" lightning talk at RubyConf, right? Glad to see you again.
行って良かったRubyConf。やって良かったLightningTalks。