rails3のvendor/pluginsに入れたら壊れた

redmineプラグインを入れようとしてごにょごにょやっていたら、
rakeがvendor/plugins are no longer allowdとか怒って、何もかも受け付けなくなってしまった。


redmineのページもエラーで見れない。早くもモチベーションが危険水域に。



なんとか対処できたのでメモ。


1. redmineディレクトリをgitに登録

cd /var/lib/redmine  # (例)
git init
git add .
git commit -m "destroyed version"

今からでも遅くない。


2. vendor/plugins/以下のディレクトリを削除

rm -r vendor/plugins/*


3. マイグレーション実行

rake db:migrate


redmineのページも見れるし、元通りになったような雰囲気なのでよし。


最後に仕上げ。


4. gitに登録

git rm vendor/plugins/*
git add .
git commit -m "healthy version"

今日はこれまで。

標準出力に一時ファイルを代入したらpとputsで挙動が異なる

前のエントリーを書いている時の恐怖体験。

IO#reopenを使わず、$stdoutに代入したら変な挙動に。

require 'tempfile'
t = Tempfile.open("")
$stdout = File.open(t, "w")
p "Whoops!"
$stdout = STDOUT
p File.read(t)  #=> "\"Whoops!\"\n"

pでは出力されたのが、

require 'tempfile'
t = Tempfile.open("")
$stdout = File.open(t, "w")
puts "Whoops!"
$stdout = STDOUT
p File.read(t)  #=> ""

putsだと出ない。






9/2追記:しのぎ方を発見。

require 'tempfile'
t = Tempfile.open("")
$stdout = File.open(t, "w")
puts "Whoops!"
$stdout.flush  # 対応策
$stdout = STDOUT
p File.read(t)  #=> "Whoops!\n"

IO#flushで内部バッファをフラッシュすれば、putsでも動きました。

http://rurema.clear-code.com/1.9.3/method/IO/i/flush.html

標準出力のテスト書いた

9/2追記:RSpecで使うと、なぜか最初のreopenでスクリプトが終了して(リターンコード=1)、それ以降のケースがなかったことにされてしまったため、reopenから$stdoutへの代入に修正しました。flushすれば代入でも上手く動くっぽいので。

参考リンク(Rubyリファレンスマニュアル)

http://doc.ruby-lang.org/ja/1.9.2/class/Tempfile.html

http://rurema.clear-code.com/1.9.3/method/Kernel/v/=3e.html ($stdout)

honto COMICをアップデートしてはいけない


私の愛したhonto COMICは死んだ。なぜか。




まず、honto COMICが生き残っている方は、まだアップデートしてはいけません。不便でしょうが、一括アップデートは控えましょう。


hontoの大きな欠点として、ダウンロード期限が1年間しかありません。他の大手は無期限のところも多い中、あえてhontoを使っていたのは、アプリが使いやすいからでした。一括ダウンロードや起動の早さ、タイトルごとに表紙をまとめてくれる機能などは特に気に入っていたのですが、そのうちの多くが失われてしまいました。


もう、消去法以外でhontoを選ぶ理由はありません。他にも電子書籍ストアはありますから、乗り換えを検討します。どうせダウンロード期限があるのですから、今まで購入した資産を気にする必要はないのです。

メタプログラミングRuby第1章を読んだ

メモ

  • メソッド探し
    • メソッドが呼び出されたら参照先を探しに行く
    • 参照先クラスに無いときはスーパークラスを辿る
  • クラスとmodule
    • moduleがincludeされているとき、includeされているクラスの後にmoduleを探しに行き、その後でスーパークラスに行く
    • 複数のmoduleがincludeされているとき、後にincludeされたmoduleが優先
  • 探す順序はクラスのancestorsメソッドで確認できる
irb(main):001:0> Integer.ancestors
=> [Integer, Numeric, Comparable, Object, Kernel, BasicObject]

ancestorの意味・使い方・読み方 | Weblio英和辞書


メタプログラミングRuby

メタプログラミングRuby

Project Euler Problem031(邪悪流)

プログラマの貴重な考える時間を節約するためには、マシンに負荷をかけることもやぶさかでない。



問題の値(200, [200, 100, 50, 20, 10, 5, 2, 1])でも、まあ1年もあれば答えはでるはず。



参考:Ruby 1.9.3 リファレンスマニュアル
class Array (Ruby 1.9.3)



まじめな解答はこちら。
http://d.hatena.ne.jp/myokoym/20120815/1345040888