cmigemoの再インストールではまった話
homebrewを使ってインストールしたcmigemoを再インストールした時にはまった話。
経緯
cmigemoはいっとき、homebrewからインストール出来ない状態が続いていました。ここ参照
たしか、Cellarというディレクトリにインストールされないで、/usr/local に直接インストールされるのはだめよって意味だと思います。 ここ参照
なので、brew doctor するとwarningが必ず出ていたんですが、下手にいじるとmigemo使えなくなりそうな気がして、放っておきました。
でも、最近 このコミット で対処されたようなので、warningを消そうと意気込んでみました。
やったこと
brew doctor すると、このようなWarningが出る。
-> brew doctor Warning: Your Homebrew is outdated You haven't updated for at least 24 hours, this is a long time in brewland! Warning: Unbrewed dylibs were found in /usr/local/lib. If you didn't put them there on purpose they could cause problems when building Homebrew formulae, and may need to be deleted. Unexpected dylibs: /usr/local/lib/libmigemo.1.1.0.dylib
意味は
homebrewが意図しないファイルがあるから削除しないとビルドする時にトラブルの原因になるよ
ということ。ここにも対処法が出ている。
でも、これを放っておいて、cmigemoを再インストールしようとすると
-> brew install cmigemo ==> Downloading http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip ######################################################################## 100.0% ==> Patching patching file src/wordbuf.c ==> chmod +x ./configure ==> ./configure --prefix=/usr/local/Cellar/cmigemo/20110227 ==> make osx ==> make osx-dict ==> make utf-8 ==> make osx-install ==> Caveats See also https://gist.github.com/457761 to use cmigemo with Emacs. You will have to save as migemo.el and put it in your load-path. Warning: Could not link cmigemo. Unlinking... Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local You can try again using `brew link cmigemo' ==> Summary /usr/local/Cellar/cmigemo/20110227: 21 files, 12M, built in 7 seconds
とエラーになる。
なので、無駄なcmigemoが残ってるんだろうということで
-> brew remove cmigemo Uninstalling /usr/local/Cellar/cmigemo/20110227...
として再度インストールしてもやっぱり同じようなエラーになる。
では、最初に戻って brew の言うとおりやってみる。
まずはインストール時のエラーメッセージの通り brew link cmigemo をやってみる。
brew link cmigemo Linking /usr/local/Cellar/cmigemo/20110227... Warning: Could not link cmigemo. Unlinking... Error: Could not symlink file: /usr/local/Cellar/cmigemo/20110227/bin/cmigemo Target /usr/local/bin/cmigemo already exists. You may need to delete it. To force the link and delete this file, do: brew link --overwrite formula_name To list all files that would be deleted: brew link --overwrite --dry-run formula_name
--overwirte オプションをつけろと。。。
-> brew link --overwrite cmigemo Linking /usr/local/Cellar/cmigemo/20110227... Warning: Could not link cmigemo. Unlinking... Error: Could not symlink file: /usr/local/Cellar/cmigemo/20110227/lib/libmigemo.dylib /usr/local/lib/libmigemo.dylib may already exist. /usr/local/lib may not be writable.
/usr/local/lib/libmigemo.dylib がすでにあるから link 出来ないよってことらしい。。。
では再度cmigemoを削除して brew doctor で言われた通りやってみる。
-> brew remove cmigemo Uninstalling /usr/local/Cellar/cmigemo/20110227.. -> ls /usr/local/lib/libmigemo.* /usr/local/lib/libmigemo.1.dylib /usr/local/lib/libmigemo.dylib -> rm /usr/local/lib/libmigemo.*
brew doctorでは /usr/local/lib/libmigemo.1.1.0.dylib だけが無駄っぽいことが書いてあったけど全部削除しちゃいました。
最後に
brew install cmigemo ==> Downloading http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip Already downloaded: /Library/Caches/Homebrew/cmigemo-20110227.zip ==> Patching patching file src/wordbuf.c ==> chmod +x ./configure ==> ./configure --prefix=/usr/local/Cellar/cmigemo/20110227 ==> make osx ==> make osx-dict ==> make utf-8 ==> make osx-install ==> Caveats See also https://gist.github.com/457761 to use cmigemo with Emacs. You will have to save as migemo.el and put it in your load-path. ==> Summary /usr/local/Cellar/cmigemo/20110227: 21 files, 12M, built in 5 seconds
となって無事インストールできました。
よかったよかった。。
rails2.2.2からrails2.3.14へアップデート
参考url
とりあえずrailsのバージョンを上げる
gem install rails -v2.3.14 --no-rdoc --no-ri
testの継承元がActiveSupportに変更されている。
test/test_helper.rbで
-class Test::Unit::TestCase +class ActiveSupport::TestCase
とする。
controllelr/application.rbがcontroller/application_controller.rbにかわっている
中身は変える必要がなさそうなので単純にリネームする。
config/boot.rbとconfig/enviroments/test.rbを変更する
rails2.2に上げる時にもやったんだけどrailsguideのscaffoldあたりまでを新しいrailsバージョンでやっておいて
config配下の設定ファイルをdiffで差分を確認しています。
config/boot.rb
def load_initializer require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" Rails::Initializer.run(:install_gem_spec_stubs) + Rails::GemDependency.add_frozen_gem_path end rescue Gem::LoadError => load_error - $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) - exit 1 + if load_error.message =~ /Could not find RubyGem rails/ + STDERR.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) + exit 1 + else + raise + end def load_rubygems + min_version = '1.3.2' require 'rubygems' - min_version = '1.3.1'
config/environments/test.rb
+ config.action_view.cache_template_loading = true
validates_date_timeでエラーになる
こんなふうにHogeモデルを初期化すると
hoge = Hoge.new('written_on(1i)' => "", 'written_on(2i)' => "", 'written_on(3i)' => "") hoge#written_on_before_type_cast => '-00-00'
ってなってしまう。
なので、validates_date_timeプラグインの中で
+ raw_value = nil if (raw_value == "" || raw_value =~ /-00-00/)
ってコードを追加した。
根本的な問題解決ではないので、この対処はやっちゃだめ(やってる自分が言ってるのって説得力ないな)。
最低限アプリ側のコードで対処しろってツッコミが来そうですな。このあとのrails3.0へのアップグレードで対応しました。
反省点
- validates_date_timeの対処がイマイチ感満載だなぁ
- rails newで作った各ファイルたちをdiffで確認するのはかなりおすすめ
rails2.1.2からrails2.2.3へのアップデート
個人的に作成、使用しているrailsアプリをrails2.1.2からrails2.2.3へアップデートした時の記録。すごーく今更感満載な記事です。。。
gettext-railsが未対応
rails2.2から標準で国際化の仕組みとしてi18nをサポートするようになりました。
さらにgettext-railsはrails2.2はサポートされてないし、特にこだわりがなければrailsの標準の機能をつかっとこうということでi18nへ変更しました。
gettextの呼び出しを削除
config/environment.rbを修正
config.gem "gettext", :lib => "gettext/rails" # これを削除
app/controller/application.rbを修正
init_gettext "personal_management" # これを削除
i18n_generatorsをインストールする
バージョンは1.1.0を指定する。environment.rbのconfig.gemに指定してはいけない。i18n_generatorsのload errorになる。
gem install i18n_generators -v1.0.0 --no-rdoc --no-ri script/generate i18n ja
とりあえずgetttextの_メソッドをi18nのtメソッド等に置き替える
- '_'メソッドとか'N_'メソッドをtメソッドに変更する。
- '_'メソッドは固定的に翻訳するだけのメソッドで
- 'N_'メソッドは翻訳文字列に動的に文字列を入れている。
i18nで動的に文字列を入れこむには
t('view.hello_rails', :hoge => 'ほげ')
とやって
view: hello_rails: '%{hoge}こんにちわrails'
とオプション引数を設定して、翻訳ファイル上に%{option_key}と書く。ただし、これはrails2.3以上の機能なので、2.2では動的に変更することはあきらめる。
rails2.2はあくまでもrails2.3へのステップアップバージョン。まぁテストが通ればいい。
untranslateを使用している箇所を削除する
エラーメッセージにはActiveRecordのメソッドっぽいのが出ていたけど
gettextで翻訳対象か否かのメソッドなので、こいつを宣言しているモデルは単純にconfig/localesの翻訳ファイルに入れなければいいだけ。
MacOSX lionにXcode4.3 rvm ruby1.8.7をインストールしてみる
ruby1.9.3は普通にインストール可能だと思うので割愛。
Xcode4.3へのアップデート
App Storeからインストール
mobileなんたらのインストールをうながされるのでインストール。
Xcode 4.2.1などの古いXcodeを削除されるか聞かれるので削除を選ぶ
Downloadタブから「Command Line Tools」をインストール
いちおうbrew doctorをしてみます。
$ brew doctor $ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
やっぱりxcode-selectをしなさいと出るので
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
をします。
他の情報では
$ sudo xcode-select -switch /Developer
をしなさいと出ますが、先ほどの古いXcodeの削除をしたところでやったから必要ないんでしょう。
ruby1.8.7のインストール
apple-gcc42のインストール
ruby1.8.7のインストールに必要です。
homebrewを使ってインストールします。
$ brew tap homebrew/dupes $ brew install homebrew/dupes/apple-gcc42
apple-gcc42のformulaはhomebrew標準のformulaには入っていなくて、
homebrew-dupus というリポジトリで管理されています。
ruby1.8.7のインストール
$ CC=/usr/local/bin/gcc-4.2 rvm install 1.8.7
$ rvm use 1.8.7 Using /Users/tomi/.rvm/gems/ruby-1.8.7-p358 $ ruby -v ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin11.4.0]
とりあえずrails2を普通使いのgemsetと分けて開発できそうです。
よかったよかった。
MacOSX lion Xcode4.3 homebrew rvm(rbenv)で ruby1.9.3 と ruby1.8.7をインストールしたい
件名の通り、出来るって記事じゃなくって「したい!」って記事です。
全然さわっていないrails2系のアプリをもういいかげん3系にあげておかんとと思って環境構築しようとしたらもう時間切れなんでしょうねぇ。。。
途中経過を書いておきます。
前提
僕の使用している環境
Xcodeのアップデート
そもそもbrewがXcodeを4.3に上げろというんです(brew doctorのメッセージ)。gitとかもアップデート出来ない。
アップデート自体はあまり問題ないようですが、インストール先が変更されているので、以下のようにしないとだめのようです。
sudo xcode-select -switch /Developer sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
: brew doctor
をすると上記のようなメッセージが出てくるらしい。
Homebrew + Command Line Tools for Xcode + rbenv 環境構築 « tamo's blog
しかし、最近は僕のようにhomebrewだけのためにXcodeを入れるのではなく、
「Command Line Tools for Xcode」というunixツールだけを集めたパッケージも作成されているようです。
era_jaというgemを公開しました
半年ぶりの更新です。まぁ宣伝です。
era_jaというrubyのDateとTimeインスタンスを和暦に変換するgemを公開しました。
era_ja | RubyGems.org | your community gem host
今はこれだけの機能ですが、調子にのったら和暦 <=> 西暦 への交互変換が可能になったらうれしいなぁと思っています。
もともと仕事で書いているスクリプトで西暦から和暦に変換することをちょこちょことやっていました。
やることといえば西暦から平成への変換なので数字の引き算だけなのですが、いちいち平成の開始年をwikipediaで調べるのが面倒になって、ネットで調べてみたら、t-diaryのソースから和暦変換の機能だけをとりだして使用しているという方法が多かった。
今はbundlerで依存ライブラリの管理をしているので、可能であればそういう機能もgemで管理したい。
簡単そうだからいっそつくってしまおうと思って作成してみました。
実は元号の開始、終了年月日って昭和から平成以外はいいかげんというかコンピュータでの計算に適さないことになっています。
1926年年12月25日で大正は終っているんだけど、昭和の開始日は同じ日になっている。
要するに1926年12月25日は大正15年12月25日と変換しても昭和元年12月25日と変換しても正しい。
明治から大正も同様になっています。
era_jaでは1926年12月25日は大正15年12月25日としています。
これも調子にのったら引数で選択出来るようになったらいいのかなぁ。
最後に使用方法を(まぁREADMEそのまんまですが)
Timeでの使用
require 'era_ja/time' Time.mktime(2012,4,29).to_era # => "H24.4.29" Time.mktime(2012,4,29).to_era("%O%E年%m月%d日") # => "平成24年4月29日"
Dateでの使用
require 'era_ja/date' Date.new(2012,4,29).to_era # => "H24.4.29" Date.new(2012,4,29).to_era("%O%E年%m月%d日") # => "平成24年4月29日"
つかってケロ!
sinatraでテストの入門の入門(その3)sinatraでcapybara
以前書いたものの続きです。
rspecと同様ほとんど変りはありません。と言ったら違うか。。
サンプルコード
require './hello_world' require 'capybara' require 'capybara/dsl' require 'test/unit' class HelloWorldTest < Test::Unit::TestCase include Capybara::DSL # Capybara.default_driver = :selenium def setup Capybara.app = Sinatra::Application.new end def test_it_works visit '/' assert page.has_content?('Hello World') end end
コードの理解
capybaraを使う場合は
- capybara
- capybara/dsl
をrequireする必要があります。
元のページではインクルードするのはCapybaraモジュールでしたが、テストを動かすと「CapybaraでなくCapybara::DSLをインクルードしなさい」と警告が出るので直しています。
後はcapybaraっぽく書けば出来そうですね。
ドライバーを変えるには
capybaraの得意技の一つであるブラウザドライバの変更ですが、サンプルコードでコメントになっている部分
Capybara.default_driver = :selenium
のように指定すればよいです。
がしかし!
Failures: 1) The HelloWorld App works Failure/Error: visit '/' Selenium::WebDriver::Error::WebDriverError: unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) # ./hello_by_capybara_spec.rb:20:in `block (2 levels) in <top (required)>' Finished in 73.62 seconds 1 example, 1 failure Failed examples: rspec ./hello_by_capybara_spec.rb:19 # The HelloWorld App works
となってブラウザが動かなくなってる。。。どうしたものかー。下書きした時はうまく動いたのになー
と悩んでいるうちにcapyabaraのissueで議論されていました。
https://github.com/jnicklas/capybara/pull/460です。
ようするにcapybara1.0.0で依存指定するselenium-webdriverのバージョンが古かったようです。
selenium-webdriverって最新だと2.5なんだけど、capybaraでは0.2を指定していたという。。
他の要件でselenium-webdriver入れてたら、こんなこと起らんもんなぁ。。
capybara1.0.1にするとselenium-webdriverが新しいバージョンが入るので解決出来ます。
rspecでは?
こんな感じでした。
require './hello_world' require 'capybara' require 'capybara/dsl' require 'rspec' describe 'The HelloWorld App' do include Capybara::DSL # Capybara.default_driver = :selenium before do Capybara.app = Sinatra::Application.new end it 'works' do visit '/' page.should be_has_content('Hello World') end end