2013-10-29 25 views

答えて

5
  • require blaba.rb使用しているRubyのバージョンに依存したファイルをロードするためにあなたのデフォルトの宝石パスに検索されます。たとえば、RVMは$HOME/.rvm/rubies/...で検索しますが、システム全体のルビーはディストリビューションのデフォルトパスを検索します。これが宝石の場所ですが、ライブラリmylibrary.rbを手動で同じパスに追加して、どのプログラムでも使用できます。しかし、それはひどいことです。それは、宝石を作成してシステムにインストールするのがはるかにクリーンな手順です。

  • require ./blabla.rbは、作業ディレクトリにあるファイルをロードします。 require /home/username/library/myproject/models/sample.rbのような完全なパスを追加できます。それはちょうど同じように動作します。 UNIXのような世界では、./の符号は、の現在のディレクトリを意味します。この解決策は、irbで、レールモデル(users.rb)をirbまたはpryにロードして使用することがよくあります。シェル環境であなたの例を与えるために(あなたはUNIXシェルに精通している場合、あなたはそれを把握します):

    GreyJewel ~ » ls myports.txt                                       
    myports.txt 
    
    GreyJewel ~ » ls ./myports.txt                                      
    ./myports.txt 
    
  • それが明示的にフル作成するため、第三の溶液require File.expand_path('../sample.rb', __FILE__)は、プログラムで使用されていますパスは、ラインを保持しているファイルが格納されているディレクトリをアンカーとして使用しています。これは、require ./sample.rbと比較してずっと安全です。 rubyファイルをロードするときには、ファイル拡張子.rbを省略することができます。

これは少し状況を明確にします。

+0

ありがとうございました。 3番目のソリューションはなぜ2番目のソリューションよりもずっと安全ですか? – 0xSina

+0

この方法は、 '絶対パス'を特定のファイルに返します。このファイルは、UNIX環境では常に '相対パス'と比較して安全です。両方の 'irb'を試して、あなたは彼らがどのように動作するかを取得します。 –

関連する問題