view_context raise *not precompiled error*

I want to access view helper method in controller, I can use view_context, view_context.image_path in development, but this causes not precompiled error in production.

A Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError occurred

isn’t precompiled

actionpack lib/sprockets/helpers/rails_helper.rb :in `digest_for’

広告

Check version rails and activesupport

railsやrails/activesupport らへんのバージョン見て処理切り分けたいときに知ってればハマらない感じなのでメモ。travis-ci便利。具体例だと https://github.com/Shopify/active_merchant/pull/687 こんなかんじにゴニョゴニョと。

* rails

** 2.3
railties/lib/initializer.rb
railties/lib/rails/version.rb

Rails.version
=> ‘2.3.18’
Rails.version.class
=> String
Rails::VERSION::STRING
=> ‘2.3.18’

** 3.2

Rails.version
=> “3.2.13”
Rails.version.class
=> String
Rails::VERSION::STRING
=> “3.2.13”

** 4.0

Rails.versionがGem::Versionのインスタンスを返しかけたけど、やっぱりStringになった
Add #to_s method to VERSION modules by charliesome · Pull Request #8501 · rails/rails https://github.com/rails/rails/pull/8501

Rails.version
=> “4.0.0.rc1”
Rails.version.class
=> String
Rails::VERSION::STRING
=> “4.0.0.rc1”

* activesupport

**2.3

require ‘active_support’だけではversionをrequireしてない!

ActiveSupport::VERSION
#=> NameError: uninitialized constant ActiveSupport::VERSION
require ‘active_support/version’ #=> []
ActiveSupport::VERSION::STRING #=> ‘2.3.18’

ActiveSupport.version
#=> NoMethodError: undefined method `version’ for ActiveSupport:Module

**3.2

require ‘active_support’だけでversionもrequireする

ActiveSupport::VERSION::STRING
=> “3.2.13”
ActiveSupport.version
=> NoMethodError: undefined method `version’ for ActiveSupport:Module

** 4.0
require ‘active_support’だけでversionもrequireする
ActiveSupport.version がGem::Versionを返す!

ActiveSupport.version
=> Gem::Version.new(“4.0.0.rc1”)
ActiveSupport::VERSION::STRING
=> “4.0.0.rc1”

根っこのほうをrequireする rails3とrails4で共通コードを使うバッドノウハウ

何が必要か切り分けて最小限呼びたいなーと書いてた。でも例えばactionpackの中でもv3.2.13とv4.0.0.beta1でファイルの置き場所はいろいろ変更されているらしく、きりがないのでrequire ‘action_view’, require ‘action_dispatch’ ぐらいの粒度で書いてしまうのがもうそれでいいと思った。そんなmoduleないっすーってのがめんどくて無理だった。

https://github.com/sanemat/actionview-link_to_blank/commit/8fa7629ea15298309e459f0aca9d3606eae2c272

じゃあactionview-link_to_blank.gemspecのadd_dependencyも ‘rails’でいいじゃん、ってのはやっぱり雑だと思うから、書きたいものの粒度に依ってしまうけども。

travis-ciでrails3.2とrails4.0流す

Edited: 2013-04-14 1:00

ベストプラクティスじゃなかったっぽいのでこのエントリはout of date! Gemfileごとに個別のディレクトリ用意するのがよさそう。

Set each gemfile to separate directory
https://github.com/sanemat/actionview-link_to_blank/pull/5

—-

travis-ciドキュメントといくつかプロジェクト見てるとこんな感じぽい。gemfileで切り分けちゃう。

https://github.com/sanemat/actionview-link_to_blank/blob/5d2968085ed90da869a24668f0a01887f06e23b2/.travis.yml

https://github.com/sanemat/actionview-link_to_blank/blob/c650fa077ffb9799022be0918f4dd503a2f91db6/gemfiles/rails3.2.gemfile
https://github.com/sanemat/actionview-link_to_blank/blob/c650fa077ffb9799022be0918f4dd503a2f91db6/gemfiles/rails4.0.gemfile

travis-ciはこれでいいとして、localで、これをコメントアウトしたりコメント外したりでbundleしまくるのが頭悪い感じなのでどうにかしたい。
https://github.com/sanemat/actionview-link_to_blank/blob/ac509d5f4840341934ed75fb36afb835452b0aa2/Gemfile

せっかくつくったgemfilesがあるから、これを使って
vendor/bundle-rails3.2
vendor/bundle-rails4.0
にbundleするようにして、bundle execで指定する
2つのbundle ディレクトリをgit ignoreする
2つ流せるrake task作る

なかんじかな こっちは試してない

travis-ciでrails3とrails4を動かしたい

おもいっきり公式ドキュメントにあった

http://about.travis-ci.org/docs/user/languages/ruby/#Testing-against-multiple-versions-of-dependencies-(Ruby-on-Rails%2C-EventMachine%2C-etc)

正確にはactionほげほげ3系と4系を動かしたい。今パッと思い出せないけど、rails3.0系, rails3.1系, rails3.2系のそれぞれでtravis回してるgemはどこかで見た気がするので、rails3.1.Gemfile とかやってくのかな。

link_to_blank 提供する actionview-link_to_blank のテストはlink_toのテストコピペしちゃえばいいじゃーん、と思ったら、railsのmasterからコピペしてきたコードではなくなっている部分があって、手元の3.2.13のかたまりで動かなかった。

Test::Unit::Assertionにはbuild_methodが生えてるけど、MiniTest::Asertionにはbuild_methodが無い、という理解でいいのかな。Rails4のコードからはbuild_method全部消えてる。

https://github.com/sanemat/actionview-link_to_blank/commit/6453d6ff5e56e2a32a860ddfb75cdd791442fd3f

対応は適当にごまかした。

mobylette, contribution calendar #1

Mobylette handles mobile request in rails. Pronounce is here; http://fr.forvo.com/word/mobylette/ My co-worker found typo yesterday, then I send pull request. Fix document typo by sanemat · Pull Request #20 · tscolari/mobylette

On the other hand, my largest contribution (if possible) is below travis-ci bug. I have to create stackoverflow question…
https://github.com/sanemat/tsurapoyo

沖縄ハッカソン 沖縄行ってない Gistar作った #railshackathon

沖縄ハッカソン参加してきた。沖縄には行ってない。Gistar作った。人気のgistのおすすめを毎日メールしてくるウェブアプリ。
GistMail

全く知らない3人で、facebookのgroupとpivotal trackerで連携しながら、前日当日も会うことなく、アプリの発表まで終わらせた。よく出来たなーと思う。チームメイトに感謝したい。shimosuk, Shindo200

pivotalとpull request見るとわかること。知ってると一瞬でわかるけど、知らないと見当もつかない、自分はそんなところを触ることが多かった。知ってるし。
https://www.pivotaltracker.com/projects/692015
https://github.com/sanemat/gist-mail
チーム開発っぽいことも自分は楽しめた。はじめに立てたminimalな仕様を、満たせたのが嬉しい。あと、やる気でた。

課題は自分のひとりよがりなpull requestの単位かなあ。こう使いたいからこのライブラリ、って言われれば取捨選択しやすいけど、このライブラリ使いたい!!ってpull requestされても、あっはい、としかならないもんなー。これから気を使う。

開発コンテスト24やマッシュアップアワード作りかけるけど一人で完成できないところから、一歩抜けだしたぞ。

Gemfileのgroupで:production, :development, :test 以外は気をつけて使う

Gemfileのgroupに:production, :development, :test 以外を使うときは各環境気をつけて使う。

具体的には、こんな.travis.ymlだったり、capistranoで”require ‘bundler/capistrano'”してると思う。

https://github.com/sanemat/soryu/blob/gh-pages/www.ohmyglasses.jp.travis.yml
https://github.com/carlhuda/bundler/blob/master/lib/bundler/deployment.rb

このとき、:personalだけにほしいgemがあったとすると、こう書きたくなる。

Gemfile
group :personal do
  gem 'EVIL_GEM'
end

でも、こう書いて、いろんなデプロイスクリプト気にせずにいると、productionにもtestにもはいってしまう。bundlerにwithout指定しかないから。

.travis.yml
bundler_args: –deployment –without development production
=> こう変える必要がある
bundler_args: –deployment –without development production personal

https://github.com/carlhuda/bundler/blob/master/lib/bundler/deployment.rb
bundle_without = [*context.fetch(:bundle_without, [:development, :test])].compact

デフォルト設定から変更するので上書いてやる必要がある
set: :bundle_without, %w(:development, :test, :personal) そんな記法無かった
set: :bundle_without, [:development, :test, :personal]

これは、stagingにほしいgemにstagingとつけていたら(正確には group :production, :staging)、travis環境にもインストールされてしまい、気付けた。

lokkaのGemfileにデータベースごとのgroupあるって聞いた https://github.com/komagata/lokka/blob/master/Gemfile