Ruby の Enumerable#inject
、引数にハッシュ指定するとループの一回目はハッシュとして処理するけど二回目以降 Integer として処理しようとして死ぬ。
ルby−−−−−−−−−1.9.2-p290 での現象です。
Ruby の Enumerable#inject
、引数にハッシュ指定するとループの一回目はハッシュとして処理するけど二回目以降 Integer として処理しようとして死ぬ。
ルby−−−−−−−−−1.9.2-p290 での現象です。
旧ブログのタグが引き継げていないのでタグを引き継ぐ(なぜか失敗する。DataMapper の挙動怪しい)
Production でも SQLite で動いているので変える
仕事で勉強したことを趣味グラミングに生かして、趣味グラミングで学んだことを仕事に反映できたらいいと思う。
ポータルシットを AutoPagerizable にしました。
pager のない theme だったら単純に theme をいじって次のページへのリンクに rel="next"
とか rel="prev"
とかつけて、AutoPagerize させたい HTML エレメントに class=" autopagerize_page_element"
とか書くだけで AutoPagerizable になるけど、自分で使ってる theme は yayugu/dm-pagination に依存してるので、プラグインをつくってモンキーパッチした。
こんな感じ。
module Lokka
module AutoPagerize
def self.registered(app); end
end
end
module DataMapper
class Pager
private
def link_to(page, contents=nil, rel={})
%(<a href="#{uri_for(page)}" rel="#{rel[:rel]}">#{contents || page}</a>)
end
def previous_link
li 'previous jump', link_to(previous_page, option(:previous_text), {:rel => "prev"}) if previous_page
end
def next_link
li 'next jump', link_to(next_page, option(:next_text), {:rel => "next"}) if next_page
end
end
end
ついでに LDRizable になるように hentry と hfeed の設定もしといた。
Amazon へのリンクを生成する Lokka Plugin を作りました。テストがないのでまだ単独のリポジトリとしては公開していないけど、以下でコードは取得できます。
lokka/public/plugin/lokka-amazon_associate at portalshit · morygonzalez/lokka
いつまで経っても全部テスト書けそうにないのでテストほぼないけどとりあえず単独のリポジトリとして公開しました。
使い方ですが、プラグインを LOKKA_ROOT/public/plugin/
に入れた後、ブラウザで www.example.com/admin/plugins/amazon_associate
にアクセスしてご自身の Associate Tag と Access Key ID と Secret Key を入れます。
お使いの Lokka の theme を開いて、本文を表示している部分を associate_link() というヘルパーメソッドに渡します。たとえば entry.haml が
.body
= @entry.body
となっているなら、
.body
= associate_link @entry.body
というようにします。
そんで本文中で以下のように書きます。(P_BLOG の頃に使っていた ISBN/ASIN 変換プラグインと同じように使えるようにしました)
<!-- ISBN=PRODUCTID --
>
そのうち画像のサイズとか選べるようにしたいですね。
24時間キャッシュするようにしてるけど、 Earthquake.gem で Growl するプラグインの画像をキャッシュするコードを真似てます。
マジで感謝。
Homebrew で rbenv と ruby-build をインストールし、Ruby をインストールしている。Nokogiri をインストールしようとするとlibiconv が足りないとエラーがでる。Nokogiri のインストールマニュアルを見ると以下のようなことが書いてある。
homebrew 0.8 or later
brew install libxml2 libxslt brew link libxml2 libxslt gem install nokogiri
言われたとおりにシンボリックリンク張って、さらに libiconv にもシンボリックリンクはった。この状態だとちゃんと Nokogiri 入る。入るが、
$ brew doctor
Lokka になくて不便だと感じていたのがスパムコメントの一括削除機能だった。スパムを取得するメソッド、またそれらをまとめて削除するメソッドはあったので、それを呼び出すインターフェースを作ってみた。最初はテストなしで pull request しようとしてたけど Lokka に怒濤のようにテストコードを書いて push している tomykaira さんのブログ記事(lokka コミッタからのお願いをお読みください - tomykaira makes love with codes)を読んで心を入れ替え、本日の Lokkathon でテストコードを書いて pull request してみた。無事 merge して頂きました。
P_BLOG の改造とかして地道にコードを公開したりはしてたけど、やっとオープンソースにコミットできた感じがする。もっと頑張っていきたいです。
Unicorn の設定をミスって(たと思ってけど実はそうじゃなかった)ポータルシットが12月の半ば頃から死んだままになってた。きっかけは Capistrano の導入で、仕事で Capistrano 使っていて大変便利なので、これをポータルシットでも使おうとした。
Unicorn で便利なのが、 kill -USR2 `cat tmp/pids/unicorn.pid`
とかやることで、ダウンタイム無しに Rails アプリケーションを再起動できるとこだ。これを Sinatra 製の Lokka でも実現したかった。Capistrano と併せて運用することで、サーバーに SSH で接続せずとも
$ bundle exec cap deploy:restart
とかで Lokka を再起動できるようになる。
これまで Lokka の database.yml に DB への接続情報をべた書きしていたのをやめ、起動時にはシェルで以下のコマンドを実行するようにした。
$ env DATABASE_URL=path/to/db bundle exec unicorn -c config/unicorn.rb -D -E production
Capistrano の deploy.rb
に書くと以下のようになる。
namespace :deploy do
task :start do
run "cd #{current_path}; env DATABASE_URL=#{db_path} bundle exec unicorn -c config/unicorn.rb -D -E production"
end
end