追記

こしば技術にっき

2012|01|05|06|11|
2013|03|

2013-03-02

_ padrino-frameworkの開発をはじめる(2013/3/2版)

最近使っている人を多く見るようになった、イケてるRubyのWebアプリケーションフレームワークPadrino。 これの開発を自分もはじめたいと思ったのでした。

そのためにはまず下記を円滑にできる必要があります。

  • ソースを入手する
  • ライブラリを入れる
  • テストを流す

ここは開発をはじめるにあたって、一番スムーズにいきたいところです。なぜなら、はじめてさわるおっかなびっくりな状態で、どこから手を付けたらわからないとか、なんかうまくいかないとかってなると大いに出鼻をくじかれてしまうからです。

そんなことぐらい自分で解消しろよと凄腕たちは言うかもしれないけれど、逆にそんなことでこれからの人が離脱してしまうのは非常にもったいない。そう思ってしまうのでした。

padrino-frameworkの開発に必要なもの

最低限下記が必要です。

  • インターネット環境
  • Ruby本体
    • 自分の場合macを使っており、rbenvとruby-buildで入れた2.0.0-p0を使っています。

ソースを入手する

つまりは、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を注視するといいでしょう。

  • padrino : メタgem
  • padrino-admin : 管理画面
  • padrino-cache : キャッシュ
  • padrino-core : Padrinoのコア機能
  • padrino-gen : ジェネレータ
  • padrino-helpers : ヘルパー
  • padrino-mailer : メーラ
  • padrino-performance : パフォーマンスツール

ライブラリを入れる

つまりは、bundlerを入れた後bundle installします。

bundlerを入れる

which bundlerと叩いてbundlerがあることを確認し、なければgem install bundlerして、bundlerを入れてください。

Gemfileに記述されたgemを入れる

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すればよいです。

だがしかし、テストがabortする!

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によるキャッシュストアのインターフェイス共通化がなされるので大きくテストコードも書き換わるのですが、マイルストーンをみるにもう少し先のバージョンまで待つ必要がありそうです。

さあ、開発をしよう

これで開発ができる状態=テストが通る状態をになりました!思うままかいていきましょう。


2012-11-24

_ Dashingを使って簡単きれいなダッシュボード

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の第一引数とで紐付いています。

Tags: ruby dashing

2012-06-08

_ Padrino日本語公式サイトを手元のローカルmacで動かそう

だいたいはgithub上のREADMEの通りに動かしたら大丈夫!

数点tipsがあるので書き留めておきます。(todo: あとでREADMEへのpull req送る)

環境はMacBookAir(Late2010)&snow leopardで確認したものになります。

コンテンツ翻訳向け最低限必要な依存物

rubyまわりの他に、mongoとPygmentizeがあれば各コンテンツを編集・確認できるようになりました。

Ruby + bundler

2012/06/01現在、1.8.7で動かせました。1.9.3は動かず。

MongoDB

homebrewで入れる。

Pygmentize

easy_installで入れる。

rake seedでエラーがでる!

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

2012-05-19

_ rails_best_practicesをrakeタスクとして動かす

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で動かす。

単にrails_best_practicesを入れて動かすだけで、Padrinoでもちゃんとチェック書けてくれました。 せっかくなのでこちらもrakeタスクとして実行できるようにしました。

https://gist.github.com/2730797

動かし方はPadrinoなので、

padrino rake rails_best_practices:jenkins_plot_plugin

とすれば動きます。 rails3版との差異はRails.rootがPadrino.rootにしているだけです。


2012-01-09

_ rb-skypemacへのpull requestが取り込まれた!

とても嬉しかったので書き残しておく。 書いたコードを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


2012|01|05|06|11|
2013|03|
追記