久々にrubygemsをリリースしました。
Rack::Requestで検索エンジンのbotからのアクセスかどうか判定します。
ruby>>
request.bot? #=> true or false
<<--
これだけ。
githubで検索してみたら、個別に実装している例がたくさん見つかったわりに、単体で切り出されているものがあまりなさそうだったので作ってみました。
久々にrubygemsをリリースしました。
Rack::Requestで検索エンジンのbotからのアクセスかどうか判定します。
ruby>>
request.bot? #=> true or false
<<--
これだけ。
githubで検索してみたら、個別に実装している例がたくさん見つかったわりに、単体で切り出されているものがあまりなさそうだったので作ってみました。
kyotocabinet用のRubygemがbuildできない状態になっていたので、
配布元のkyotocabinet-rubyからgemを書き起こしました。
Gemfile
ruby>>
gem 'kyotocabinet-ruby', '~> 1.27',
:require => 'kyotocabinet'
<<--
buildが必用なgemをbundlerで管理するときに、
buildオプションを指定したい場合があります。
そのような場合には、
pre>>
bundle config build.pg --with-pg-dir=/Library/PostgreSQL/9.0
<<--
のようにgemごとにbuildオプションを設定することが出来ます。
この設定は ~/.bundle/config に以下のように保存されます。
BUNDLE_BUILD__PG: --with-opt-dir=/Library/PostgreSQL/9.0
<<--
rake gems:unpack GEM=foo などでvender/gems 以下にunpackしたgemとbundlerを併用したい場合があります。
最近では、locale_rails-2.0.5にパッチをあてたものを利用したい局面でそうなりました。
こんな場合には、Gemfile にて
ruby>>
gem 'locale_rails', '=2.0.5', :path => 'vendor/gems/locale_rails-2.0.5'
<<--
というように記述しておけば、unpack したgemを使ってくれます。
第二引数のversionは必須っぽいのでご注意。
古いRailsアプリをBundler仕様にする場合、
ruby>>
config.gem "foo",
:version => "0.0.1",
:lib => "bar",
:source => "http://gems.github.com"
<<--
と等価なGemfileの記述方法は
ruby>>
source "http://gems.github.com"
gem "foo", "0.0.1", :require => "bar"
<<--
で良いようです。バージョン指定をしない場合は第二引数を省略可。
Rubygemsが新しすぎると、掲題のようなエラーが出る場合があります。
とりあえず回避するには
pre>>
<<--
までダウングレードすればok
Rubygems-1.8.2 にアップデートして色々と痛い目にあっています。
ちょっと時期尚早な気がしたので、一旦過去のバージョンに戻すことに。
以下のようにすればokです。
pre>>
<<--
Rubyスクリプト中から
ruby>>
require "hoge"
<<--
されている hoge のソースを見てみたい時には、
sh>>
vim gem which hoge.rb
<<--
すると見つけてきてくれます。
久々にRails関連の記事です。
vendor/gems 以下に gemをunpackしたときに、以下のような警告が出てくることがあります。
pre>>
Unpacked gem *** in vendor/gems has no specification file.
<<--
(***は適当なgemの名前)この場合、
pre>>
% cd vendor/gems/***
% gem specification *** > .specification
<<--
を実行すれば解決します。
しばらくGemをリリースしてなかったですが、gemcutterを使って
以下のようにすれば、rubygems.orgにgemをリリースできるようです。
pre>>
% gem push pkg/hoge-x.y.z.gem
<<--
rubygems.orgにアカウントを作っておき、gemcutterをgem installしておく必用があります。
非常に簡単になりましたね。
しばらくGemを作ってなかったので気がつかなかったのですが、
Gem作りを取り巻く環境が結構変わっているようですね。
まず、newgemやcutagem, hoeのようにgemのひな形を作ってくれる
jeweler
というtoolが結構使われているようです。これはgithubにインテグレートされていて非常に便利です。
githubはちょっと前からgemをホストするgemリポジトリサービスをやめてしまったようで、代わりに
Gemcutterを使うようになっています。
jewelerを使う事で、gemcutterやrubyforgeにgemをpushする事ができます。
たまにRubyforgeが落ちていてgem installする事ができなくなっている場合がありますが、そんな場合には以下のミラーサーバが利用できるかもしれません。
ローカルにダウンロードしてから sudo gem install します。
GAEなどでファイル数の多いライブラリを使うために、gemのパッケージから不要そうなファイルを消してjarファイルにまとめるために作ったスクリプトです。
ruby>>
#!/usr/bin/env ruby
def run(command)
puts command
system command
end
case ARGV[0]
when 'install'
run "jgem install -i ./gems --no-ri --no-rdoc #{ARGV[1]}"
when 'uninstall'
run "jgem uninstall -i ./gems #{ARGV[1]}"
end
Dir['gems/gems/'].each do |dir|
%w(
Generaters TODO README. README
spec// test// examples// tasks//
tutorial// demo// website/**/*
CHANGES CHANGES.txt CHANGELOG
LICENSE MIT-LICENSE Rakefile CONTRIBUTORS
Manifest.txt History.txt install.rb setup.rb
).each do |pattern|
Dir[File.join(dir, pattern)].each do |path|
run "rm -rf #{path}"
end
end
end
Dir['gems/cache', 'gems/bin', 'gems/doc'].each do |path|
run "rm -rf #{path}"
end
run "jar cf lib/merb.jar -C ./gems ."
<<--
Gemを作るのが面倒になってきたので、githubから直接requireできたら楽になるかもしれないと思い、試してみました。
ruby>>
def git(uri, sha1, options = {})
require "tmpdir"
basename = File.basename(uri)
outdir = File.join(Dir.tmpdir, basename, sha1)
unless File.exist?(outdir)
sh = proc{|command| IO.popen("#{command} 2>&1"){|io| io.read}}
sh["git clone #{uri} #{outdir}"]
sh["cd #{outdir}; git checkout #{sha1}"]
end
$:.unshift File.join(outdir, 'lib')
require options[:require_as] || basename.split(/.git$/)[0]
end
<<--
Dir.tmpdirを使ってOSのテンポラリディレクトリの下にリポジトリをクローンしてきて、指定したリビジョンをcheckoutし、LOAD_PATHに"lib"を加えて、リポジトリ名のファイルをrequireしています。
意外と普通にgemの代わりに使える感じです。
RubyGemsを使うときに、たびたびGemのバージョンを指定する機会があります。
'=', '>=', '>' などの等号、不等号は、対応するRubyのオペレータと同じような機能なのでわかりやすいのですが、'~>'についてはどういう意味なのか若干わかりにくい感じです。一応マニュアルにはこんな感じに書かれています。
Greater than version
= Greater than or equal to
'>' は、悲観的(pessimistic)なバージョン指定です。> 1.2.0' は、'1.2.0', '1.2.1.1' などにはマッチしますが、
例えば、'
'1.3'にはマッチしません。
最後の数字の桁だけがGrater than or equal toで、それ以外は厳密一致のようです。
GAEを使う上での大きな制限として、ファイル数1000までというのがあります。
これを乗り越えるために、unpackしたGemの中から不要なファイルを掃除したりする必要があったのですが、
関連するGem群をjarファイルにまとめる事でこの問題を乗り越えられます。
上記のファイルをlibの下に配置して、config/init.rb
あたりでrequire_fixを読み込みます。
これはjarファイルの中のrbファイルの読み込みに関するバグを
回避するためのものです。
実際に以下のサイトでmerb.jarを使って運用しています。
これによって、事実上ファイル数制限に左右されずにアプリケーションを開発する事が出来るようになります。
ただ、1ファイルのサイズ制限(10MB)が存在するので、jarファイルが大きくなりすぎた場合は分割する必要があります。
GAE/Jにはファイル数制限(1000まで)があるので、なるべく不要なファイルは減らしたいのが人情というものです。
ということで、unpackしたgemsから不要なファイルを掃除するために、以下のようなスクリプトを使用しています。
script/strip_gems
ruby>>
#!/usr/bin/env ruby
Dir['gems/gems/'].each do |dir|
%w(
Generaters TODO README. README
spec// test// examples// tasks//
tutorial// demo//
CHANGES CHANGES.txt CHANGELOG
LICENSE MIT-LICENSE Rakefile CONTRIBUTORS
Manifest.txt History.txt install.rb setup.rb
).each do |pattern|
Dir[File.join(dir, pattern)].each do |path|
command = "rm -rf #{path}"
puts command
system command
end
end
end
<<--
Gemの中に含まれているファイルには制約が無いので、
簡単なパターンで全てを掃除するのは難しいですね。
非常にシンプルなのですが、毎回GlobalHelpersに書くのが面倒なので、
Merbから
GRAVATAR
のアイコンを表示するための
merb_gravatarプラグインを作りました。
http://github.com/genki/merb_gravatar/tree/master
インストール方法
pre>>
% sudo gem install merb_gravatar
<<--
使用法
dependencyでmerb_gravatarを指定して、viewで以下のように使います。
html>>
<%= gravatar @user.mail, 16 %>
<<--
第二引数はアイコンのサイズを1~80で指定します。省略すると80が選ばれます。
例

GAE/Jでも使えます(See http://watch-me.appspot.com/people)
gemを指定したディレクトリにインストールする方法を紹介します。
以下のように -i オプションでディレクトリを指定します。
pre>>
gem install -i ./gems data_objects --no-ri --no-rdoc
<<--
Gemをunpackしている場合に、もう一つ、二つGemを追加したい時などに重宝します。
GAEjのファイル数制限が厳しいので、rails.jarを試作してみました。
jrubyのバグなのか、jarファイルの中身に対してrequireをする時に、
pathの中に../..のような感じの指定が入っているとうまくロードできないようなので、その問題を回避するモンキーパッチをあてる必要がありました。
require_fix.rb
ruby>>
alias :require_original :require
def require(path)
path = File.expand_path(path) if path.to_s.match(/^file:/)
require_original path
end
alias :load_original :load
def load(path)
path = File.expand_path(path) if path.to_s.match(/^file:/)
load_original path
end
<<--
それでこんな感じに使えます。
pre>>
% java -jar $JRUBY_HOME/lib/jruby-complete.jar -rrequire_fix -rrails-2.3.2.jar -S rails -v
Rails 2.3.2
<<--
実際にはlibの下に設置する感じになりますね。
Merbのデフォルト構成にはRailsのような
HTMLのsanitizeを行うようなヘルパーメソッドは無いのですが、
Gemで提供されている
sanitize
というライブラリを使うと、簡単にHTMLのsanitizeを行う事が出来ます。
ruby>>
Sanitize.clean(html, Sanitize::Config::RELAXED)
<<--
タグ毎に有効・無効の細かい設定が出来て、使い勝手が良いです。
gemファイルはRubyのライブラリ配布用のアーカイブ的なファイル形式ですが、
今回はこれを展開して中身を取り出す方法を紹介します。
まずは、適当なgemファイルを用意して、tarコマンドで展開します。
pre>>
% tar xvf foo.gem
% ls
data.tar.gz metadata.gz
<<--
このように、data.tar.gzとmetadata.gzという二つのファイルが出てきます。
続いて、data.tar.gzを展開すると、gemspecファイルに記載されている
ファイル群一式が展開されます。
pre>>
% tar data.tar.gz
<<--
metadata.gzは、gzipで圧縮されたYAML形式のgemspecです。
追記
gemファイルを展開する方法としては、gem unpackという専用のコマンドがあるようです。見落としていた。
RubyGemsをインストールする時に、--source
オプションによってgemリポジトリを指定する事が出来ますが、
これを指定した場合、そのGemが依存するGemも同じsourceから取ってこようとするため、
依存するGem一式を全てそのgemリポジトリ上に用意する必要があります。
これはなかなか大変なので、--source指定した場合には、
指定した場所に無い場合、システムに設定されているデフォルトのgemリポジトリに探しにいってくれるとありがたいですね。
methopara
is a gem that enables us to use Method#parameters with Ruby-1.9.1.
It was originally made by @ko1_twitter, the creater of YARV, at the previous meet-up of asakusa.rb.
And this time, I added an interface to use it for UnboundMethod.
Now you can use UnboundMethod#parameters with new methopara, like this.
ruby>>
require 'rubygems'
require 'methopara'
class Foo
def foo(a,b) end
end
Foo.instance_method(:foo).parameters
#=> [[:req, :a], [:req, :b]]
<<--
Enjoy!
Yesterday (Feb 10, 2009),
asakusa.rb
took place at Akihabara, Tokyo.
asakusa.rb is a rubyist community that is based on Asakusa.
In the monthly meet-up of that community,
@ko1_twitter wrote a code snippet.
This snippet is a kind of backport of Method#parameters for Ruby-1.9.1.
His quick job led a way for merbists to change merb to be corresponding to Ruby-1.9.1.
He named his work "methopara". It stands for METHOd PARAmeters.
And I made it as a gem
for ease of use.
Now we can use it by the command below.
pre>>
% sudo gem install methopara --source http://merbi.st
<<--
Usage is as follows.
ruby>>
require "rubygems"
require "methopara"
def foo(a,b=nil,&c) end
method(:foo).parameters
=> [[:req, :a], [:opt, :b], [:block, :c]]
<<--
This gem is only for Ruby-1.9.1.
Because Ruby18x have merb-action-args, and Ruby-1.9.2 and its successors will have built-in Method#parameters.
Enjoy!
See Also
Gemをインストールすると、依存するGemも一緒にインストールする事が出来ますが、
Gemの依存関係は、通常の依存関係の他に、開発環境用の依存関係も設定されています。
開発環境用の依存関係は、そのGemの開発や修正を行うために必要なGemを表しています。
今回は、開発環境用の依存関係をまとめてインストールする方法を紹介します。
pre>>
% sudo gem install --development gemname
<<--
これでOK.
I made a simple plugin to explain a concept of render-filters.
In your controller,
ruby>>
class Posts < Application
before_render :set_title1, :only => :show
before :set_title2, :only => :show
def show(id)
@post = Post.get(id)
display @post
end
private
def set_title1
@title = @post.title # <= you can access to @post here
end
def set_title2
@title = @post.title #=> @post is nil!
end
end
<<--
Without this plugin, you couldn't access to instance variables from before-filters.
Of course you can prepare @post in the first before-filter so that you can access from other before-filters.
But why Merb has the action-args?
They are ignored in such case.
This was the problem I wanted to solve by the plugin.
Merbを使ってWebアプリケーションを開発している or
しようと考えている方の為に、
お勧めのプラグイン/Slice情報を共有するサービス
Merbist Plugins
をテスト公開いたします。

デザインもScaffoldに毛が生えた程度で、
この手のサービスには欠かせないRatingなどの基本機能が無い状態なのですが、
そもそもMerbのプラグイン情報を共有する場所が無いので、
無いよりはちょっとましかなという事で公開しておきます。
merb_rating, dm-has-rating のようなプラグインを見つけたら、
あるいは作ったら、Rating出来るようになると思います。
ちなみに、新着プラグインのFeedも配信しています。
よろしくお願いします。
I released the merb_full_url plugin that provides URL which has origin (scheme, host and port)
You can install this gem like this;
pre>>
% sudo gem install merb_full_url --source http://merbi.st
<<--
And you get full URLs by calling full_url/full_resource methods instead of url/resource.
But I think, it is better for merb to become providing such methods in advance :-)
githubの仕様変更
により、githubでEdgeGem (EdgeのコードをGemにまとめたもの)
を常にフレッシュな状態で公開する事が難しくなってしまったので、
Merbist向けにプラグイン配布用のGemサーバを用意しました。
gems.rubyforge.orgやgems.github.comなどの通常のGemサーバと同様に、以下のようにsourcesに登録して使う事ができます。
pre>>
% sudo gem sources -a http://merbi.st
<<--
仕組みとしては、http://merbi.st/fetch にアクセスされると、
登録されているgithub上のリポジトリから、Edgeのコードがpullされ、
GemとGemサーバ用のインデックスデータを作成します。
現時点では、以下のGemを公開しています。
pre>>
% gem list -r -s http://merbi.st
*** REMOTE GEMS ***
dm-has-versions (0.1.1)
dm-pagination (0.1.1)
merb_babel (0.1.2.2)
merb_component (0.1.1)
merb_recognize_path (0.0.2)
merb_slice-gen (0.0.2)
merb_timezone_select (0.0.2)
pagination_scope (0.0.8)
rttool (1.0.2)
<<--
サーバの負荷の面で不安があるので、
現時点では同期するリポジトリの登録は管理者のみに制限していますが、
http://merbi.st/plugins
よりプラグイン情報を登録していただければ(要アカウント作成)、
問題が無い限り定期的に確認して同期リストに追加いたします。
反応がない場合は@takiuchi
までご一報ください。
capistranoはwebアプリケーションをデプロイするための非常に便利なツールですが、出力のログがちょっと読みにくく、どのタスクが実行されたのかが分かりにくいな、と感じていました。
そこで、
capistrano_colors
というGemを使って、capistranoの出力を色づけしてみる事にしました。
これを使うと、以下のように分かりやすい感じになります。

設定方法ですが、まずはGemをインストールします。
pre>>
% sudo gem install capistrano_colors
<<--
続いて、config/deploy.rb (いわゆるレシピファイル)の中か、
~/.caprcの中で、以下の一行を追加します。
ruby>>
require 'capistrano_colors'
<<--
これでOKです。あとは、普通にcapコマンドを使えば、
色づけされた出力が得られます。
#githubで質問したら、この記事を紹介してくれたので読んでみました。
Gem Rebuilds only on Version Bump
We recently changed the system so that only gemspec pushes that contain a bumped version will be built. This will prevent accidental gem clobbering and we can now guarantee that when you release a specific gem version, that version will never change.
昔はgemspecファイルがちょっとでも編集されていれば良かったのですが、
1/13の時点で、GitHub上でGemを再生成するためには、バージョン番号を増やさないと駄目になっているようです。
僕は、コメント欄でhalorgiumさんが言っているように、
"next-to-be-released"アプローチを支持したいのですが、どうなりますかね。
Merbや最近のRailsのように、ライブラリが全てpackage化されたGemの形で提供される事が想定されている場合、
いままではGitHubでEdgeGemを作ってそれを使っていたのですが、
これからはバージョン番号を上げない限り、それが出来なくなってしまいます。
とりあえずは、4番目のリビジョン番号を機械的にインクリメントする事で対応しようかなと考えていますが、もっと良い方法はないものかな。
他に気になった話題として、technomancyさんがコメントで書いている事によると、次のバージョンのRubygemsからは、"1.1.0.RC1"のような
プリリリースバージョンである事を示す文字列を認識するようになるそうです。
確かにこうすれば"next-to-be-released"的な使い方も出来るので良いかな。
しかし、version文字列が数字とドットだけであるという想定に依存してるソフトウェアが、しばらくエラーを出すようになる気もしますね。
DataMapper用のバージョン管理プラグイン、
dm-has-versions
をリリースしました。
dm-is-versionedというライブラリが既にあるのですが、Railsで慣れ親しんだacts_as_versionedと微妙に挙動が違うのと、revert_toやversion=ができないなど、細かいところが足りない感じがしたので作りました。
USAGE:
以下のコードをご覧の通りです。
ruby>>
class Story
include DataMapper::Resource
property :id, Integer, :serial => true
property :title, String
property :updated_at, DateTime
has_versions :ignore => [:updated_at]
end
Story.auto_upgrade!
story = Story.create(:title => 'hello')
story.version #=> 0
story.update_attributes :title => 'good night'
story.version #=> 1
story.title #=> 'good night'
story.version = 0
story.title #=> 'hello'
<<--
auto_upgrade!は最初に一回だけ必要です。
MerbのGeneratorは、merb-genというコマンドに集約されています。
Railsではscript/{generate|destroy}を使いますが、独立したコマンドになっているので、
MERB_ROOT以外の場所でも利用可能です。
さて、Merbでも、RailsのようにGeneratorを独自に作る事が出来るのですが、
そのためにはGEM_ROOTにGeneratorsというファイルを作り、
以下のように自分をGeneratorとして登録するコードを書きます。
ruby>>
scope 'merb-gen' do
dir = File.join(File.dirname(FILE), 'lib', 'generators/')
Merb.add_generators dir + 'mailer_generator'
end
<<--
MerbのGeneratorは、より汎用的なGeneratorを作る仕組みである、
templater
を使って実装されています。
そのため、Merb用のGeneratorを作る場合は、上記ファイルのscopeに
merb-genを指定する必要があります。
Railsの場合は、foo_generater のようにGem名のサフィックスでGenerator
を提供するかどうか判別していましたが、
こっちのほうがもっと賢いやり方だと思います。
GitHub上で公開されているgemは、GEM_NAMEにユーザIDがプレフィックスとしてついてしまうので、以下のようにdependency.rbを記述する必要があります。
ruby>>
dependency "genki-merb_babel", :require_as => 'merb_babel'
<<--
Railsのconfig.gemの場合の:libオプションに似ていますね。
昔からあったような気がするのですが、
つい最近までその存在に気がついてませんでした。
pre>>
% sudo gem update merb
<<--
これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。
gemコマンドを使っていると、古いバージョンのgemがだんだんたまっていきます。
年の瀬も近い事ですし、最新バージョン以外のgemをきれいにする方法を紹介します。
pre>>
% sudo gem clean
<<--
これでOK.
WordPressとRailsを動かすためにMySQLとRuby/gem/Railsをインストールする。
/etc/mysql/my.cnf に下記内容を追記。
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
でlatin1が混じっていないか確認する。
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
1.3.1
Rails 2.2.2
Successfully installed rmagick-2.8.0
gem install rspec←エラーになる場合gemファイルを個別にダウンロードしてローカルインストールする。
C:\workspace\product>ruby script/generate rspec
create lib/tasks/rspec.rake
create script/autospec
create script/spec
create script/spec_server
create spec
create spec/rcov.opts
create spec/spec.opts
create spec/spec_helper.rb
create stories
create stories/all.rb
create stories/helper.rb
たまにrubyforgeが重くてgemがインストールできないことがある。
仕方ないので直接rubyforgeからgemをダウンロードしてローカルインストールする。(直接ダウンロードする分には普通にアクセスできる。。。)
gem install rspec --local
のように--localを指定すれば良い。ただし依存するgemも一式ダウンロードしておく必要があることに注意。
メモメモ。
gem searchしても2.1.2しか見つからないので、どうしたらいいのかなと思ったら-vでバージョン指定すれば大丈夫でした。
shell>>
gem search rails -r
*** REMOTE GEMS ***
(中略)
rails (2.1.2)
(中略)
<<--
-vオプションを指定
shell>>
sudo gem install rails -v 2.1.1
<<--
札幌Ruby会議01で発表してきました
http://kakutani.com/20081025.html#p01
角谷さんの資料にあったcucumber。
サンプルがcucumberのgithubにあったのでリンク。
http://github.com/aslakhellesoy/cucumber/tree/master/examples
http://github.com/aslakhellesoy/cucumber/tree/master/examples/japanese_calculator
http://github.com/aslakhellesoy/cucumber/tree/master/examples/calculator
japanese_calculatorは角谷さん製です!
できた(というか切り出してきた)gemspec
http://github.com/satoko/prawn/tree/master/prawn.gemspec
forkしているprawnにはprawn.gemspecファイルがありません。
で、自分で適当にでっち上げようとしたのですが、どうやらgemspec(spec.files)の内容が正しくない様子で、動作するgemが作れません。いちいち使用するすべてのファイルを上げなければいけないのだけれど、どうしたら簡単にできるものか...と思ったら、project内のRakefileにgemspecがあった!というので、それを切りだしました。
そこに至るまでのポイントぽいものを挙げます。
###gemspecで重要な属性
Important Attributes
name .. version .. platform .. summary .. require_paths .. files .. dependencies
http://docs.rubygems.org/read/chapter/20
###spec.fileの便利な書き方:Dir.blog
(注意)githubの場合Dir.globはgem生成時にエラーになるようで(エラー通知メールが来てた)、irbでDir.blogして展開したものをgemspecにコピペするのが正解のようです。
shell>>
irb(main):001:0> Dir.glob("{examples,lib,spec,vendor,data}///*")
<<--
結果をspec.filesにコピペ。
rails>>
Gem::Specification.new do |spec|
spec.name = "prawn"
spec.files = ["copy & past the result of Dir.blog"] +
["Rakefile"]
<<--
###gemspecでローカルで正しいgemが作れるかテストする
下記のコマンドで生成されたgemをインストールし、展開後のdirを見たりテストを実行したりして正しくgemが作られているかテストします。
shell>>
$ gem build prawn.gemspec
<<--
###githubでgems.githum.comの一覧に入れてもらう手順
(注意)一覧とはここです。
###Refs
http://d.hatena.ne.jp/akm/20080621#1214036969
http://docs.rubygems.org/read/chapter/20
http://code.google.com/p/rubeus/source/browse/trunk/rubeus.gemspec#
gem update --systemではうまく行かない場合があるようなので、
その場合には以下のようにすればOkです。
pre>>
<<--
This release includes a small spec change.
I changed spec of count method. Now it works without :group option.
If you want old behaviour, you can use count_ids method instead.
http://github.com/genki/pagination_scope/tree/master
Good luck ;-)
Today, maiha, the author of the one of the most authorized books regarding rails in Japan, had sent me a patch including various improvements for the PaginationScope.
I want to say thank you for the great contribution.
And then I merged it into the master and pushed to the GitHub.
http://github.com/genki/pagination_scope/tree/master
Here is the list of improvements from Maiha.
<モデル>
<ヘルパ>
Thanks again!
config/environment.rbの中で、config.gemによってversion指定したgemを、rake gems:unpackしようとすると、以下のようなエラーが出るようです。
pre>>
% rake gems:unpack GEM=genki-pagination_scope
(in /Users/takiuchi/project/formula)
ERROR: While executing gem ... (ArgumentError)
Illformed requirement ["">= 0.0.4""]
<<--
RailsのLightHouseでも報告されていました。
**rake gems:unpack version handling broken **
ということで、この問題を回避するために、上記Ticketに添付されていた
Patchを参考に、以下のようなMonkeyPatchを作ってみました。
config/initializers/fix_gem_unpack_for_2_1_1.rb
ruby>>
module Rails
class GemDependency
def unpack_to(directory)
FileUtils.mkdir_p directory
Dir.chdir directory do
Gem::GemRunner.new.run(
unpack_command.map {|i| i.gsub(/\A["']|["']\z/, '')})
end
spec_filename = File.join(gem_dir(directory), '.specification')
File.open(spec_filename, 'w') do |file|
file.puts specification.to_yaml
end
end
end
end
<<--
これをconfig/initializers/の下に置いておけば、とりあえず正常にunpackする事ができます。
MacportsでMySQLをインストールしているという前提で。
普通に
pre>>
sudo gem install msyql
<<--
をすると、libmysqlclientが見つからずにインストールが失敗します。
そこで、/opt/local/lib/ruby/gems/1.8/gems/mysql-2.7に移動し、
pre>>
<<--
でOK。
今install railsすると2.1.1が入ってしまうが2.1.0を使いたい場合。
gem install RubyInline --version '= 2.1.0'