トップ «前の日記(2011/12/27 (火) ) 最新 次の日記(2011/12/29 (木) )» 編集 RSS feed

HsbtDiary


2011/12/28 (水) [長年日記]

[rake] CoffeeScript をコンパイルする Rake タスク

tDiary で CoffeeScript を使いたくなったので、まずは Rake でコンパイルするところから。Asset pipeline みたいのは CGI ベースだとオーバーヘッドが大きすぎるので rack の方で上手いことやるところかな。

desc "compile coffeescript"
task :compile do
       require 'coffee-script'
       FileList['js/**/*.coffee'].each do |coffee|
		File.open(coffee.gsub(Pathname(coffee).extname, '.js'), 'w') do |js|
                       js.write CoffeeScript.compile(File.read(coffee))
               end
       end
end

最初、.js へのリネームは Pathname の sub_ext を使って書いてたんだけど、これは 1.9 feature ということを知って gsub で書き直したのであった。ばたり。

[rails][sprockets] rails-3.2.0.rc1 と sprockets-2.1.2 の組み合わせで assets:precompile できない件

ちょっと前から触ることができるアプリケーションを rails-3.2.0.rc1 にアップグレードするという隠密行動をあちこちでやってるんだけど、heroku 用のアプリケーションで何故か push の時に実行される assets:precompile でエラーが発生してしまうという現象に遭遇したのでちょっと深追いしてみた。

原因としては app/assets/stylesheets/foo.scss というような sass-rails の処理対象となるファイルが含まれている場合に sprockets/base.rb の circular_call_protection で raise してしまうみたい。同じような現象は#270: rake assets:precompile fails after upgraded to Rails 3.2.0.rc1 - Issues - sstephenson/sprockets - GitHubで報告済みなので反応待ちの状態。

heroku の cedar stack だと lazy compile じゃなくて assets:precompile するのを推奨しているので、このままだと rails-3.2 は使えないなあ。ばたり。

本日のツッコミ(全2件) [ツッコミを入れる]
# なかむら(う) (2011/12/28 (水) 14:41)

いやgsubはダメでしょういくらなんでも。<br>この場合glob条件によりファイル名が*.coffeeであることは明らかなので、sub(/\.coffee\z/, '.js')とかでいいんじゃないでしょうか。

# hsbt (2011/12/28 (水) 16:35)

確かに sub でよかったですね…。ありがとうございます。