query: tag:gem

久々にrubygemsをリリースしました。

Rack::Requestで検索エンジンのbotからのアクセスかどうか判定します。

ruby>>
request.bot? #=> true or false
<<--

これだけ。

githubで検索してみたら、個別に実装している例がたくさん見つかったわりに、単体で切り出されているものがあまりなさそうだったので作ってみました。

posted by genki genki on Sun 25 Dec 2011 at 06:00 with 0 comments

kyotocabinet用のRubygemがbuildできない状態になっていたので、
配布元のkyotocabinet-rubyからgemを書き起こしました。

Gemfile

ruby>>
gem 'kyotocabinet-ruby', '~> 1.27',
:require => 'kyotocabinet'
<<--

posted by genki genki on Mon 1 Aug 2011 at 04:10 with 0 comments

buildが必用なgemをbundlerで管理するときに、
buildオプションを指定したい場合があります。
そのような場合には、

pre>>
bundle config build.pg --with-pg-dir=/Library/PostgreSQL/9.0
<<--

のようにgemごとにbuildオプションを設定することが出来ます。
この設定は ~/.bundle/config に以下のように保存されます。

yaml>>

BUNDLE_BUILD__PG: --with-opt-dir=/Library/PostgreSQL/9.0
<<--

posted by genki genki on Mon 13 Jun 2011 at 16:46 with 0 comments

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は必須っぽいのでご注意。

posted by genki genki on Sun 29 May 2011 at 07:25 with 0 comments

古い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"
<<--

で良いようです。バージョン指定をしない場合は第二引数を省略可。

posted by genki genki on Wed 25 May 2011 at 08:26 with 0 comments

Rubygemsが新しすぎると、掲題のようなエラーが出る場合があります。
とりあえず回避するには

pre>>

gem update --system 1.6.2

<<--

までダウングレードすればok

posted by genki genki on Sun 15 May 2011 at 04:17 with 0 comments

Rubygems-1.8.2 にアップデートして色々と痛い目にあっています。
ちょっと時期尚早な気がしたので、一旦過去のバージョンに戻すことに。
以下のようにすればokです。

pre>>

gem update --system 1.7.1

<<--

posted by genki genki on Sun 15 May 2011 at 04:03 with 0 comments

Rubyスクリプト中から

ruby>>
require "hoge"
<<--

されている hoge のソースを見てみたい時には、

sh>>
vim gem which hoge.rb
<<--

すると見つけてきてくれます。

posted by genki genki on Sun 8 May 2011 at 17:08 with 0 comments

久々にRails関連の記事です。

vendor/gems 以下に gemをunpackしたときに、以下のような警告が出てくることがあります。

pre>>
Unpacked gem *** in vendor/gems has no specification file.
<<--

(***は適当なgemの名前)この場合、

pre>>
% cd vendor/gems/***
% gem specification *** > .specification
<<--

を実行すれば解決します。

posted by genki genki on Sun 7 Nov 2010 at 01:16 with 0 comments

しばらくGemをリリースしてなかったですが、gemcutterを使って
以下のようにすれば、rubygems.orgにgemをリリースできるようです。

pre>>
% gem push pkg/hoge-x.y.z.gem
<<--

rubygems.orgにアカウントを作っておき、gemcutterをgem installしておく必用があります。
非常に簡単になりましたね。

posted by genki genki on Wed 6 Oct 2010 at 02:00 with 0 comments

しばらくGemを作ってなかったので気がつかなかったのですが、
Gem作りを取り巻く環境が結構変わっているようですね。

まず、newgemやcutagem, hoeのようにgemのひな形を作ってくれる
jeweler
というtoolが結構使われているようです。これはgithubにインテグレートされていて非常に便利です。

githubはちょっと前からgemをホストするgemリポジトリサービスをやめてしまったようで、代わりに
Gemcutterを使うようになっています。
jewelerを使う事で、gemcutterやrubyforgeにgemをpushする事ができます。

posted by genki genki on Sat 17 Oct 2009 at 09:15 with 0 comments

たまにRubyforgeが落ちていてgem installする事ができなくなっている場合がありますが、そんな場合には以下のミラーサーバが利用できるかもしれません。

ローカルにダウンロードしてから sudo gem install します。

posted by genki genki on Sat 10 Oct 2009 at 20:00 with 0 comments

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 ."
<<--

posted by genki genki on Mon 7 Sep 2009 at 19:14 with 2 comments

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の代わりに使える感じです。

posted by genki genki on Thu 16 Jul 2009 at 17:34 with 0 comments

RubyGemsを使うときに、たびたびGemのバージョンを指定する機会があります。
'=', '>=', '>' などの等号、不等号は、対応するRubyのオペレータと同じような機能なのでわかりやすいのですが、'~>'についてはどういう意味なのか若干わかりにくい感じです。一応マニュアルにはこんな感じに書かれています。

  • = Equals version
  • != Not equal to version
  • Greater than version

  • < Less than version
  • = Greater than or equal to

  • <= Less than or equal to
  • ~> Approximately greater than
    (see "Pessimistic Version Constraint" below)

'>' は、悲観的(pessimistic)なバージョン指定です。
例えば、'
> 1.2.0' は、'1.2.0', '1.2.1.1' などにはマッチしますが、
'1.3'にはマッチしません。
最後の数字の桁だけがGrater than or equal toで、それ以外は厳密一致のようです。

posted by genki genki on Sat 6 Jun 2009 at 01:26 with 0 comments

GAEを使う上での大きな制限として、ファイル数1000までというのがあります。
これを乗り越えるために、unpackしたGemの中から不要なファイルを掃除したりする必要があったのですが、
関連するGem群をjarファイルにまとめる事でこの問題を乗り越えられます。

上記のファイルをlibの下に配置して、config/init.rb
あたりでrequire_fixを読み込みます。
これはjarファイルの中のrbファイルの読み込みに関するバグを
回避するためのものです。

実際に以下のサイトでmerb.jarを使って運用しています。

これによって、事実上ファイル数制限に左右されずにアプリケーションを開発する事が出来るようになります。
ただ、1ファイルのサイズ制限(10MB)が存在するので、jarファイルが大きくなりすぎた場合は分割する必要があります。

posted by genki genki on Sun 19 Apr 2009 at 08:25 with 0 comments

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の中に含まれているファイルには制約が無いので、
簡単なパターンで全てを掃除するのは難しいですね。

posted by genki genki on Wed 15 Apr 2009 at 04:51 with 0 comments

非常にシンプルなのですが、毎回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が選ばれます。

ss1

GAE/Jでも使えます(See http://watch-me.appspot.com/people)

posted by genki genki on Tue 14 Apr 2009 at 11:05 with 0 comments

gemを指定したディレクトリにインストールする方法を紹介します。
以下のように -i オプションでディレクトリを指定します。

pre>>
gem install -i ./gems data_objects --no-ri --no-rdoc
<<--

Gemをunpackしている場合に、もう一つ、二つGemを追加したい時などに重宝します。

posted by genki genki on Sun 12 Apr 2009 at 17:34 with 2 comments

GAEjのファイル数制限が厳しいので、rails.jarを試作してみました。

rails-2.3.2.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の下に設置する感じになりますね。

posted by genki genki on Sat 11 Apr 2009 at 09:41 with 0 comments

Merbのデフォルト構成にはRailsのような
HTMLのsanitizeを行うようなヘルパーメソッドは無いのですが、
Gemで提供されている
sanitize
というライブラリを使うと、簡単にHTMLのsanitizeを行う事が出来ます。

ruby>>
Sanitize.clean(html, Sanitize::Config::RELAXED)
<<--

タグ毎に有効・無効の細かい設定が出来て、使い勝手が良いです。

posted by genki genki on Tue 24 Feb 2009 at 15:19 with 0 comments

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という専用のコマンドがあるようです。見落としていた。

posted by genki genki on Sat 14 Feb 2009 at 16:31 with 2 comments

RubyGemsをインストールする時に、--source
オプションによってgemリポジトリを指定する事が出来ますが、
これを指定した場合、そのGemが依存するGemも同じsourceから取ってこようとするため、
依存するGem一式を全てそのgemリポジトリ上に用意する必要があります。

これはなかなか大変なので、--source指定した場合には、
指定した場所に無い場合、システムに設定されているデフォルトのgemリポジトリに探しにいってくれるとありがたいですね。

posted by genki genki on Fri 13 Feb 2009 at 09:21 with 0 comments

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!

posted by takiuchi takiuchi on Wed 11 Feb 2009 at 16:18 with 0 comments

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

posted by genki genki on Wed 11 Feb 2009 at 10:04 with 1 comment

Gemをインストールすると、依存するGemも一緒にインストールする事が出来ますが、
Gemの依存関係は、通常の依存関係の他に、開発環境用の依存関係も設定されています。
開発環境用の依存関係は、そのGemの開発や修正を行うために必要なGemを表しています。
今回は、開発環境用の依存関係をまとめてインストールする方法を紹介します。

pre>>
% sudo gem install --development gemname
<<--

これでOK.

posted by genki genki on Wed 4 Feb 2009 at 02:42 with 0 comments

I made a simple plugin to explain a concept of render-filters.

merb_render_filter

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.

posted by takiuchi takiuchi on Sun 1 Feb 2009 at 10:08 with 0 comments

Merbを使ってWebアプリケーションを開発している or
しようと考えている方の為に、
お勧めのプラグイン/Slice情報を共有するサービス
Merbist Plugins
をテスト公開いたします。

ss

デザインもScaffoldに毛が生えた程度で、
この手のサービスには欠かせないRatingなどの基本機能が無い状態なのですが、
そもそもMerbのプラグイン情報を共有する場所が無いので、
無いよりはちょっとましかなという事で公開しておきます。

merb_rating, dm-has-rating のようなプラグインを見つけたら、
あるいは作ったら、Rating出来るようになると思います。

ちなみに、新着プラグインのFeedも配信しています。

よろしくお願いします。

posted by genki genki on Sat 24 Jan 2009 at 02:38 with 0 comments

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 :-)

posted by takiuchi takiuchi on Sat 24 Jan 2009 at 02:24 with 0 comments

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
までご一報ください。

posted by genki genki on Fri 23 Jan 2009 at 05:01 with 0 comments

capistranoはwebアプリケーションをデプロイするための非常に便利なツールですが、出力のログがちょっと読みにくく、どのタスクが実行されたのかが分かりにくいな、と感じていました。
そこで、
capistrano_colors
というGemを使って、capistranoの出力を色づけしてみる事にしました。
これを使うと、以下のように分かりやすい感じになります。

ss

設定方法ですが、まずはGemをインストールします。

pre>>
% sudo gem install capistrano_colors
<<--

続いて、config/deploy.rb (いわゆるレシピファイル)の中か、
~/.caprcの中で、以下の一行を追加します。

ruby>>
require 'capistrano_colors'
<<--

これでOKです。あとは、普通にcapコマンドを使えば、
色づけされた出力が得られます。

posted by genki genki on Sun 18 Jan 2009 at 02:25 with 0 comments

#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文字列が数字とドットだけであるという想定に依存してるソフトウェアが、しばらくエラーを出すようになる気もしますね。

posted by genki genki on Sun 18 Jan 2009 at 00:09 with 0 comments

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!は最初に一回だけ必要です。

posted by genki genki on Fri 16 Jan 2009 at 03:37 with 0 comments
Recently, I've been making web sites by using Merb. It was like a battle lacking logistics. I made and released dm-pagination on github. Yes, I know dm-is-paginated-0.0.1, but its spec files was not working. The dm-pagination is able to be used with arbitrary collections which include scoped_query. You can easily paginate, like this: ruby>> class Posts def index @posts = Post.paginate(:page => params[:page]) end <<-- Links will be drawn by calling simple helper method. html>>
    <% @posts.each do |post| %>
  • <%= h(post.body) %>
  • <% end %>
<%= paginate @posts %> <<-- [merb_slice-gen](http://github.com/genki/merb_slice-gen/tree/master) is also available in order to provide useful generators for slices of which it has namespace but doesn't have subdirectories. You can generate controller, resource and resource_controller in slice project, like this pre>> % slice-gen controller top <<-- it generates controller files enclosed by SliceName module without any subdirectories. In addition, there are other gems I made. * [genki-merb_component (0.1.1)](https://github.com/genki/merb_component/tree) * [genki-merb_recognize_path (0.0.2)](https://github.com/genki/merb_recognize_path/tree) * [genki-merb_timezone_select (0.0.2)](https://github.com/genki/merb_timezone_select/tree)
posted by takiuchi takiuchi on Thu 15 Jan 2009 at 02:33 with 0 comments

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
を提供するかどうか判別していましたが、
こっちのほうがもっと賢いやり方だと思います。

posted by genki genki on Tue 13 Jan 2009 at 23:24 with 0 comments

GitHub上で公開されているgemは、GEM_NAMEにユーザIDがプレフィックスとしてついてしまうので、以下のようにdependency.rbを記述する必要があります。

ruby>>
dependency "genki-merb_babel", :require_as => 'merb_babel'
<<--

Railsのconfig.gemの場合の:libオプションに似ていますね。

posted by genki genki on Fri 2 Jan 2009 at 20:56 with 0 comments

昔からあったような気がするのですが、
つい最近までその存在に気がついてませんでした。

pre>>
% sudo gem update merb
<<--

これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。

posted by genki genki on Fri 19 Dec 2008 at 13:04 with 0 comments

gemコマンドを使っていると、古いバージョンのgemがだんだんたまっていきます。

年の瀬も近い事ですし、最新バージョン以外のgemをきれいにする方法を紹介します。

pre>>
% sudo gem clean
<<--

これでOK.

posted by genki genki on Tue 16 Dec 2008 at 15:36 with 0 comments

WordPressとRailsを動かすためにMySQLとRuby/gem/Railsをインストールする。

mysql5のインストール

aptitude install mysql-server mysql-client libmysqlclient15-dev

aptitude install libmysql-ruby1.8

文字コードをUTF8に設定

/etc/mysql/my.cnf に下記内容を追記。

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8

/etc/init.d/mysql restart

mysql> status

でlatin1が混じっていないか確認する。

mysqladminのインストール

aptitude install mysql-admin

Ruby1.8.7インストール

aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8

sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby

sudo ln -s /usr/bin/ri1.8 /usr/bin/ri

sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc

sudo ln -s /usr/bin/irb1.8 /usr/bin/irb

ruby -v

ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

gem1.3.1のソースインストール

cd /usr/local/src/

wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz

tar xvf rubygems-1.3.1.tgz

cd rubygems-1.3.1

ruby setup.rb

ln -s /usr/bin/gem1.8 /usr/bin/gem

gem -v

1.3.1

gem update

gem install rails

Railsのインストール

rails -v

Rails 2.2.2

ImageMagickのインストール

aptitude install imagemagick librmagick-ruby1.8 librmagick-ruby-doc libfreetype6-dev xml-core -y

aptitude install libmagick9-dev

export GEM_HOME=/var/lib/gems/1.8

export RUBY_LIB=/usr/lib

gem install rmagick

Successfully installed rmagick-2.8.0

posted by ysakaki ysakaki on Sun 14 Dec 2008 at 03:21 with 0 comments

gem install rspec←エラーになる場合gemファイルを個別にダウンロードしてローカルインストールする。

gemファイルのダウンロード

  • http://rubyforge.org/frs/?group_id=797&release_id=27505 から「rspec-1.1.10.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=84&release_id=975 から「diff-lcs-1.1.2.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=505&release_id=2361 から「syntax-1.0.0.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=1513&release_id=27516 から「hoe-1.8.2.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=1024&release_id=27440 から「rubyforge-1.0.1.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=1024&release_id=27440 から「rake-0.8.3.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=1766&release_id=20259 から「win32console-1.1.0-i386-mswin32.gem」をダウンロード
  • http://rubyforge.org/frs/?group_id=1750&release_id=16551 から「rcov-0.8.1.2.0-mswin32.gem」をダウンロード

インストール

  • gem install rspec --local
  • gem install rspec-rails-1.1.10.gem --local
  • gem install win32console --local
  • gem install rcov-0.8.1.2.0-mswin32.gem --local

プロジェクトにrspec関連ファイルを生成

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

posted by ysakaki ysakaki on Tue 25 Nov 2008 at 14:03 with 0 comments

たまにrubyforgeが重くてgemがインストールできないことがある。
仕方ないので直接rubyforgeからgemをダウンロードしてローカルインストールする。(直接ダウンロードする分には普通にアクセスできる。。。)

gem install rspec --local

のように--localを指定すれば良い。ただし依存するgemも一式ダウンロードしておく必要があることに注意。

posted by ysakaki ysakaki on Tue 18 Nov 2008 at 11:44 with 0 comments

メモメモ。
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
<<--

posted by satoko satoko on Mon 17 Nov 2008 at 16:25 with 0 comments

札幌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は角谷さん製です!

posted by satoko satoko on Mon 27 Oct 2008 at 13:25 with 0 comments

できた(というか切り出してきた)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の一覧に入れてもらう手順

  1. prawn.gemspecというファイルを用意する
  2. コミット
    shell>>
    git push prawn.gemspec -m "add gemspec file"
    <<--
  3. https://github.com/satoko/prawn/editRubyGemにチェックする
  4. gem searchで所望のgemが出てくるのを待つ(max 15分くらい?)
    shell>>
    $ gem search satoko-prawn -r
    *** REMOTE GEMS ***
    satoko-prawn (0.2.99.2)
    <<--

(注意)一覧とはここです。

###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#

posted by satoko satoko on Thu 2 Oct 2008 at 10:14 with 1 comment

gem update --systemではうまく行かない場合があるようなので、
その場合には以下のようにすればOkです。

pre>>

gem install rubygems-update

update_rubygems

<<--

posted by genki genki on Mon 29 Sep 2008 at 19:39 with 0 comments

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 ;-)

posted by takiuchi takiuchi on Sun 28 Sep 2008 at 03:55 with 0 comments

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.

<モデル>

  • AR.paginate の第三引数に options を渡せるように変更
  • AR.paginate の options は第一引数でも可能にした
    AR.paginate(params[:page], 10, options)
    以外にも以下のように書ける
    ruby>>
    options = {
    :page => params[:page],
    :per_page => 10,
    :order => "id",
    }
    AR.paginate(options)
    <<--

<ヘルパ>

  • Helper#paginate のオプション名を変更 (newer->prev, older->next)
    昇順、降順によって newer/older が逆の意味になってわかり辛かったので
  • Helper#paginate の各要素にクラス名を付与
    will_paginate のスタイルシートがそのまま使えるように合わせた
  • Helper#paginate のリンクに rel 属性を追加
    AutoPagerize 対応
  • Helper#paginate のオプションに truncate を追加
    省略時の '...' を設定可能にした

Thanks again!

posted by takiuchi takiuchi on Fri 26 Sep 2008 at 18:46 with 0 comments

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する事ができます。

posted by genki genki on Wed 24 Sep 2008 at 01:54 with 0 comments

MacportsでMySQLをインストールしているという前提で。
普通に

pre>>
sudo gem install msyql
<<--

をすると、libmysqlclientが見つからずにインストールが失敗します。
そこで、/opt/local/lib/ruby/gems/1.8/gems/mysql-2.7に移動し、

pre>>

ruby extconf.rb --with-mysql-config=/usr/local/mysql/bin/mysql_config

make

make install

<<--

でOK。

posted by genki genki on Fri 12 Sep 2008 at 14:18 with 2 comments

今install railsすると2.1.1が入ってしまうが2.1.0を使いたい場合。
gem install RubyInline --version '= 2.1.0'

posted by ysakaki ysakaki on Tue 9 Sep 2008 at 14:12 with 1 comment