[#37679] [FEATURE:trunk] EncDet again — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

23 messages 2009/01/03

[#37748] $LOAD_PATHとバージョンの運用の関係 — akira yamada / やまだあきら <akira@...>

1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

12 messages 2009/01/09
[#37758] Re: $LOAD_PATHとバージョンの運用の関係 — "NARUSE, Yui" <naruse@...> 2009/01/11

成瀬です。

[ruby-dev:37849] Re: $SAFE=1でのrequireがSecurityErrorになる条件

From: KURODA Hiraku <hiraku@...>
Date: 2009-01-28 04:00:13 UTC
List: ruby-dev #37849
こんにちは、黒田ひらくです。

TADA Tadashi さんは書きました:
> $SAFE=1でもrequireはできるので(↓)、原因はどこか他にあると思うの
> ですが、よくわかりません。
>
>    % ruby19 -e '$SAFE=1; require "net/http";'
>    # =>エラーなし


僕の環境で試したら、こんな風にnet/httpのrequireでもエラーになりました。

   $ ~/opt/ruby19/bin/ruby -ve '$SAFE=1;p require "net/http"'
   ruby 1.9.1p5000 (2009-01-28 trunk 21811) [x86_64-linux]
   -e:1:in `require': Insecure operation - require (SecurityError)
           from -e:1:in `<main>'

それで少し調べると、gemのディレクトリが優先されるようになっていて、

   $ ~/opt/ruby19/bin/ruby -e 'puts $:[0..5]'
   /home/hiraku/opt/gem/lib
   /home/hiraku/hg/misc/lib
   /home/hiraku/opt/gem/gems/rmagick-2.8.0/lib
   /home/hiraku/opt/gem/gems/rmagick-2.8.0/ext
   /home/hiraku/opt/gem/gems/rmagick-2.8.0/bin
   /home/hiraku/opt/gem/gems/hpricot-0.6.164/lib/universal-java1.6

試しに全てのgemを無効にしたら

   $ ~/opt/gem/gems$ mv * /home/hiraku/tmp/

het/httpをrequireしてもエラーにならなくなりました。

   $ ~/opt/ruby19/bin/ruby -ve '$SAFE=1;p require "net/http"'
   ruby 1.9.1p5000 (2009-01-28 trunk 21811) [x86_64-linux]
   true


しかし、ではどのgemが悪いのかと思ったら、どれをgemディレクトリに戻してもエラーが復活するので、
試しにgemを全部無効にしてから空のlibディレクトリだけを復帰させると

   $ ~/opt/gem/gems$ mv * /home/hiraku/tmp/
   $ ~/opt/gem/gems$ mkdir -p rake-0.8.3/lib

これだけでエラーが復活しました。


まとめると

 * 1.9になってgemが標準で使われるようになった(-rubygemsがいらなくなった)
 * なので、gemが何かインストールされていると'常に'それを見にいくようになった
 * SAFE=1だと、そのあたりが悪さをしてエラーになる

といった感じでしょうか。


# 1.8.7では、-rubygemsを付けていてもエラーにはなりませんでした。

1.8.7と1.9で$:のgem回りの用意の仕方に違いがあるみたいなので、その辺なのかも?
1.9だと先述の用に各gemのlibディレクトリが最初から$:に入ってますが、1.8.7は

   ~$ ruby -ve 'require "rubygems";puts $:'
   ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]
   /home/hiraku/opt/gem/lib
   /home/hiraku/hg/misc/lib
   /usr/local/lib/site_ruby/1.8
   /usr/local/lib/site_ruby/1.8/x86_64-linux
   /usr/local/lib/site_ruby
   /usr/lib/ruby/vendor_ruby/1.8
   /usr/lib/ruby/vendor_ruby/1.8/x86_64-linux
   /usr/lib/ruby/vendor_ruby
   /usr/lib/ruby/1.8
   /usr/lib/ruby/1.8/x86_64-linux
   .

このように、各gemのlibは入っていません


ちなみに、僕の環境はこんな感じです。

 Ruby-1.8.7 : Ubuntu 8.10のパッケージ
 Ruby-1.9 : svnのソースからコンパイルして ~/opt/ruby19 にインストール
 gem : ~/opt/gem にインストール。GEM_HOME等もここを指す


以上、何かの参考になりましたら嬉しいです。

-- 
--------------------------------------------------
 黒田 拓(くろだ ひらく)
    hiraku@sapporo.email.ne.jp
    http://www.hinet.mydns.jp/
--------------------------------------------------

In This Thread

Prev Next