自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

March 01, 2010 [長年日記]

[Misc] IT技術者で知ったかぶり過ぎない会話術

ちょっと今日気になる出来事があったのでそれについて考察だったりします。

で、本題。

似たようなライブラリ「○○」と「◇◇」の二つがあり、Aさんは「◇◇」使いたいと思っています。(もちろん、かっちりとメリット/デメリットを表にして検討できれば良いのですが)あまり下調べができていない状態で、些細なやりとりで話を進める際、特にマイナスポイントを指摘していく場合の会話です。

Aさん「○○って××機能がないから使いづらいよね。◇◇使おう。」

Bさん「え?△△あるじゃん?」

Aさん「あれ?あわわ。」

ここでAさんは知ったかぶりのような印象を周囲に与えてしまいます。

しかし、この会話、最初を疑問形で始めるだけで知ったかぶりにならずに済んだりします。

Aさん「○○って××機能みたいなのってあったっけ?」

Bさん「え?△△あるじゃん?」

Aさん「おおぉ、それそれ。」

この後、△△を勉強しなおして再度話をしてもいいですし、場合によっては「それって◇◇よりもいいんだっけ?」とさらに質問を繰り返すのもアリでしょう。

この会話であれば、もしBさんが知らなかったのであれば…

Aさん「○○って××機能みたいなのってあったっけ?」

Bさん「え~、知らない。あったっけなぁ。」

Aさん「今回は◇◇使うかー。」

この最後の一言で(たとえ◇◇という結論にならないとしても)自分に有利な方向に話を進めることができます。

もちろん、このやり方は断言しないといけない重要な局面で使うとアウトなのでお奨めしませんが、最初から断言しなくても良い場合は使ってみてもよいと思います。まぁ、ずるいっちゃずるいけどねー。

#案外できてない人多いのですよ、いや、自戒も込めて。


March 02, 2010 [長年日記]

[Ruby] rvm - 1バージョンのRubyに複数のgemのバージョンを入れる

例えば、ruby-1.8.7の環境にrails-2.3.4とrails-2.3.5を入れてそれぞれでテストしたい。詳しくはこちらから。

% rvm 1.8.7
% rvm gemset create rails234
% rvm 1.8.7%rails234
% gem install rails -v 2.3.4
% rvm gemset create rails235
% rvm 1.8.7%rails235
% gem install rails -v 2.3.5 --no-rdoc

rvm 1.8.7%rails234でテストを実行すればrails-2.3.4の環境でテストができる。1.8.7%rails235でテストを実行すればrails-2.3.5ね。
両方でテストをしたい場合は

% rvm 1.8.7%rails234,1.8.7%rails235 rake test

でOK。便利。

[Rails] gettext_rails:とりあえず2.3.5対応

無事、2.3.5対応が終わった。

distance_of_time_in_wordsが機能拡張されてたのでそれに追随した。

こういうのはもう、i18nに任せちゃった方が楽だよなぁ。

ま、ともかく、次は3.0か。

[Rails] 3.0 betaを試してみる

まずはインストール。

% rvm gemset create rails3beta
% rvm 1.8.7%rails3beta
% gem update --system
% gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
% gem install rails --pre

gemは最新版が必要な模様。

% cd gettext_rails
% rake test

いきなりエラー … orz。ま、そりゃそうだよな。続きは明日にするか。

[Rails] 3.0 betaを試してみる(2)

ちょっと悔しいので、gettext_railsのサンプルアプリをrails3化してみることにした。Rails3のリリースノートに、rails3化するプラグインが紹介されていたので、それを使ってみることにした。

% rvm 1.8.7%rails3beta
% cd git/gettext_rails/sample
% script/plugin install git://github.com/rails/rails_upgrade.git

ここでインストールされるRakeタスクが表示される。以下、ざっくりと説明(翻訳)してみる。

  1. rake rails:upgrade:check … チェック/分析のみ。
  2. rake rails:upgrade:backup … checkを実施した後に出力結果を参考に全て手作業で修正していくのが良いのだけど、自動的にアップデートしたいよね。で、その時のもっとも速いやり方が、"rails ."。これは単に存在するコードを新しく生成されたappで上書きしてしまう。なので、その前にこのコマンドを使ってバックアップを取っておく。バックアップはupgrade後に削除しても良い。
  3. rake rails:upgrade:routes … 古いroutesファイルから新しいroutesファイルを生成する。
  4. rake rails:upgrade:gems … Gemfileを生成する。
  5. rake rails:upgrade:configuration … config/environment.rbから新しい設定ファイルであるconfig/application.rbを生成する。

ということなので、まずは、上からやってみる…。けどやり始めたら長そうなので、今日は寝る。続きはまた後で。


March 09, 2010 [長年日記]

[Rails] 3.0 betaを試してみる(3) rake rails:upgrade:check

間が空いちゃったけど、前回の続き。

まずは、rake rails:upgrade:checkでチェックしてみよう。

% rvm 1.8.7%rails235   (Rails-2.3.5環境で実施)
% rake rails:upgrade:check
(in /home/mutoh/dev/git/gettext_rails/sample_rails3)
Old gem bundling (config.gems)
The old way of bundling is gone now.  You need a Gemfile for bundler.
More information: http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade
 
The culprits: 
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/config/environment.rb
 
Soon-to-be-deprecated ActiveRecord calls
Methods such as find(:all), find(:first), finds with conditions, and the :joins option will soon be deprecated.
More information: http://m.onkey.org/2010/1/22/active-record-query-interface
 
The culprits: 
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/app/controllers/articles_controller.rb
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/app/helpers/articles_helper.rb
 
Old router API
The router API has totally changed.
More information: http://yehudakatz.com/2009/12/26/the-rails-3-router-rack-it-up/
 
The culprits: 
	- config/routes.rb
 
Deprecated test_help path
You now must require 'rails/test_help' not just 'test_help'.
More information: http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices
 
The culprits: 
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/test/test_helper.rb
 
New file needed: config/application.rb
You need to add a config/application.rb.
More information: http://omgbloglol.com/post/353978923/the-path-to-rails-3-approaching-the-upgrade
 
The culprits: 
	- config/application.rb
 
Deprecated constant(s)
Constants like RAILS_ENV, RAILS_ROOT, and RAILS_DEFAULT_LOGGER are now deprecated.
More information: http://litanyagainstfear.com/blog/2010/02/03/the-rails-module/
 
The culprits: 
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/app/controllers/application_controller.rb
	- /home/mutoh/dev/git/gettext_rails/sample_rails3/app/models/article.rb

むぅ。いっぱいあるのぅ。

[Rails] 3.0 betaを試してみる(4) rake rails:upgrade:backup

とりあえず先ほどのチェック結果は後で勉強することにして、まずはバックアップを取っておく。

%rake rails:upgrade:backup
(in /home/mutoh/dev/git/gettext_rails/sample_rails3)
 
* backing up app/controllers/application_controller.rb to app/controllers/application_controller.rb.rails2
* backing up app/helpers/application_helper.rb to app/helpers/application_helper.rb.rails2
* backing up config/routes.rb to config/routes.rb.rails2
* backing up config/environment.rb to config/environment.rb.rails2
* backing up config/database.yml to config/database.yml.rails2
* backing up doc/README_FOR_APP to doc/README_FOR_APP.rails2
* backing up test/test_helper.rb to test/test_helper.rb.rails2
 
This is a list of the files analyzed and backed up (if they existed);
you will probably not want the generator to replace them since
you probably modified them (but now they're safe if you accidentally do!).
 
- .gitignore
- app/controllers/application_controller.rb
- app/helpers/application_helper.rb
- config/routes.rb
- config/environment.rb
- config/environments/*
- config/database.yml
- doc/README_FOR_APP
- test/test_helper.rb

.rails2という拡張子をつけてバックアップが取られるのね。

[Rails] 3.0 betaを試してみる(5) rake rails:upgrade:gems

check時に「Old gem bundling (config.gems)」と出力されたのをバージョンアップしてくれる。

3.0では、config.gemを使用せずに、Bundlerというライブラリを使用してGemfileに使用するgemを追加する形に変更されたのでそれの対応。でも、Gemfileって、config/配下じゃなくて、RAILS_ROOT直下に置くのね…。

% rake rails:upgrade:gems > Gemfile
% cat Gemfile
# Edit this Gemfile to bundle your application's dependencies.
# This preamble is the current preamble for Rails 3 apps; edit as needed.
path "/path/to/rails", :glob => "{*/,}*.gemspec"
git "git://github.com/rails/rack.git"
 
gem "rails", "3.0.pre"
 
gem 'locale_rails'
gem 'gettext_activerecord'
gem 'gettext_rails'

config/environment.rbにあるconfig.gemの行は削除しておく。

[Rails] 3.0 betaを試してみる(6) rake rails:upgrade:routes

次に、check時に「Old router API」と出力されたのをバージョンアップ。

% rake rails:upgrade:routes > new_routes.rb
% mv new_routes.rb config/routes.rb
% cat config/routes.rb
(in /home/mutoh/dev/git/gettext_rails/sample_rails3) #この行は不要なので削除する。
SampleRails3::Application.routes.draw do
  resources :articles
  match '/:controller(/:action(/:id))'
end

だいぶ変わったなー。SampleRails3というのが本アプリのクラス名になる、ということかな。

[Rails] 3.0 betaを試してみる(7) rake rails:upgrade:configuration

最後にconfig/applicationを生成する。

% rake rails:upgrade:configuration > config/application.rb
% cat config/application.rb 
(in /home/mutoh/dev/git/gettext_rails/sample_rails3) #不要なので削除する。
# Put this in config/application.rb
require File.expand_path('../boot', __FILE__)
 
module SampleRails3
  class Application < Rails::Application
     :
     :
  end
end

中身は旧config/environment.rbをコピーした感じ。
config/environment.rbは以下のように書き換える。こちらは自動じゃないのか。

# Load the rails application
require File.expand_path('../application', __FILE__)
 
# Initialize the rails application
#YourApp::Application.initialize!
SampleRails3::Application.initialize!  #自分のアプリ用に書き換える。

[Rails] 3.0 betaを試してみる(8) rails 3.0 betaで実行

さて、準備はできたので、さっそく起動してみよう。

% rvm 1.8.7%rails3beta
% ruby script/server
/home/mutoh/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems.rb:230:in `activate': can't activate rails (= 2.3.2, runtime) for [], already activated rails-3.0.0.beta for [] (Gem::LoadError)
	from /home/mutoh/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:35:in `require'
	from ./script/../config/boot.rb:54:in `load_initializer'
	from ./script/../config/boot.rb:38:in `run'
	from ./script/../config/boot.rb:11:in `boot!'
	from ./script/../config/boot.rb:109
	from script/server:2:in `require'
	from script/server:2

がーん。ちと出直します…。


March 12, 2010 [長年日記]

[Rails] 3.0 betaを試してみる(9) railsコマンドを動作するように

前回の続きなんだけど、その前に、railsコマンド自体が動作しないのに気づいたので動作するようにそちらをまず修正。

% rails -v
/home/mutoh/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems.rb:334:in `bin_path': can't find executable rails for rails-3.0.0.beta (Gem::Exception)

同様のことに悩んでいる人は多いらしく、こちらを参照しながら、railtiesをインストール。

% gem install railties --pre

インストールしただけでもやっぱり動作しないので、とりあえず、空のプロジェクトを作ってそれと比較することにした。

% cd ../
% rails newprj
      create  
      create  README
      create  .gitignore
      create  Rakefile
      create  config.ru
      create  Gemfile
      create  app
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/models
      create  app/views/layouts
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/cookie_verification_secret.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/session_store.rb
      create  config/initializers/inflections.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  doc
      create  doc/README_FOR_APP
      create  lib
      create  lib/tasks
      create  lib/tasks/.gitkeep
      create  log
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log
      create  public
      create  public/422.html
      create  public/index.html
      create  public/404.html
      create  public/favicon.ico
      create  public/robots.txt
      create  public/500.html
      create  public/images
      create  public/images/rails.png
      create  public/stylesheets
      create  public/stylesheets/.gitkeep
      create  public/javascripts
      create  public/javascripts/rails.js
      create  public/javascripts/effects.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/prototype.js
      create  public/javascripts/application.js
      create  script
      create  script/rails
      create  test
      create  test/performance/browsing_test.rb
      create  test/test_helper.rb
      create  test/unit
      create  test/functional
      create  test/fixtures
      create  test/integration
      create  tmp
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  vendor/plugins
      create  vendor/plugins/.gitkeep

お。script/配下がrailsだけになってる!とりあえず環境依存ではなさそうなので新しいのをこちらにコピってきて上書き。他のファイルは全削除。これなら動くか!?ということでrailsコマンドを起動。

% rails -v
/home/mutoh/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- initializer (LoadError)
	from /home/mutoh/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
	from /home/mutoh/dev/git/gettext_rails/sample_rails3/config/boot.rb:54:in `load_initializer'
	from /home/mutoh/dev/git/gettext_rails/sample_rails3/config/boot.rb:38:in `run'

まだエラー出るなぁ。config/boot.rbあたりが怪しいかな。ということで、両者を比較するとこれまた全然違う。新しい方がかなりシンプルだ。ということで、新しいconfig/boot.rbでこちらも上書き。

% rails -v
/home/mutoh/.rvm/gems/ruby-1.8.7-p249%rails3beta/gems/bundler-0.9.10/lib/bundler/resolver.rb:163:in `resolve': Could not find gem 'rails (= 3.0.pre, runtime)' in any of the sources. (Bundler::GemNotFound)

んっと、今度はGemfileの指定の問題か。前回、rake rails:upgrade:gemsで生成したGemfileの中身を修正する。

# Edit this Gemfile to bundle your application's dependencies.
# This preamble is the current preamble for Rails 3 apps; edit as needed.
source 'http://gemcutter.org'
 
#path "/path/to/rails", :glob => "{*/,}*.gemspec"
#git "git://github.com/rails/rack.git"
#
#gem "rails", "3.0.pre"
gem "rails", "3.0.0.beta"
#
gem 'locale_rails'
gem 'gettext_activerecord'
gem 'gettext_rails'

んでもって実行。

% rails -v
/home/mutoh/.rvm/gems/ruby-1.8.7-p249%rails3beta/gems/bundler-0.9.10/lib/bundler/resolver.rb:163:in `resolve': Could not find gem 'locale_rails (>= 0, runtime)' in any of the sources. (Bundler::GemNotFound)

お、ようやくlocale_railsまできたぞ。bundlerを使ってインストールしておこう。

% bundler install

なんかいろいろインストールされた。

% rails -v
Rails 3.0.0.beta

おぉ。ようやくバージョンが表示できた…、って今日はここまでか(苦笑)。


March 13, 2010 [長年日記]

[Rails] 3.0 betaを試してみる(10) 今度こそアプリ起動

昨夜の続き。rails 3.0ではscript/serverの代わりにrails serverとしてrailsを起動するようになった模様。

$ cd dev/git/gettext_rails/sample_rails3
$ rails server 
% rails server
/home/mutoh/dev/git/gettext_rails/sample_rails3/config/application.rb:4: uninitialized constant SampleRails3::Rails (NameError)
	from /home/mutoh/.rvm/gems/ruby-1.8.7-p249%rails3beta/gems/railties-3.0.0.beta/lib/rails/commands.rb:36:in `require'

上記エラーが出たのでconfig/application.rbについて、3.0で生成した空プロジェクトのconfig/application.rbと比較して見たところ、先頭の方でrailsの基本ライブラリをロードする、というコードが抜けていた。 そこで、空プロジェクトを参考に以下のように修正した。

require File.expand_path('../boot', __FILE__)
require 'rails/all'  #追加
 
# Auto-require default libraries and those for the current Rails environment.
Bundler.require :default, Rails.env #追加
 
module SampleRails3
  class Application < Rails::Application
    :
    :
  end

んでもって起動。gettext_activerecord周りでエラー発生。

% rails server
/home/mutoh/.rvm/gems/ruby-1.8.7-p249%rails3beta/gems/activesupport-3.0.0.beta/lib/active_support/core_ext/module/aliasing.rb:31:in `alias_method': undefined method `default_error_messages' for class `Class' (NameError)

ある意味想定どおり(ActiveRecordはかなり内部構造が変わったので)なので、あとはgettext_activerecordを3.0対応させないとこの先は進めない。ということで一旦休憩。