1

私は Rack アプリケーションである gem を作成しているので、私のアプリケーションは config.ru ファイルでインスタンス化されると想定しています。特定のパスは、この config.ru ファイルに関連していると思います。では、アプリの初期化時にパスを取得して設定するにはどうすればよいでしょうか?

例えば:

私の宝石に隠されています:

class MyApp
  def initialize
    @base_path = get_the_base_path_here
  end
  def call(env)
    html = render_view(@base_path + '/views/index.erb')
  end
end

gem の config.ru のユーザー:

require 'my_app'
run MyApp.new

...およびそのビュー ディレクトリ:

/views
   index.erb

アップデート:

これを実現する 1 つの方法は、ベース パスを引数として渡すことですが、引数として渡さずにこれを実現する方法を見つけたいと思います。

require 'my_app'
run MyApp.new(File.dirname(__FILE__))
4

2 に答える 2

1

現在のファイルの絶対パス

一般に、現在のファイルの絶対パスを見つけるために使用するだけで、必要File.expand_path(__FILE__)に応じて変数またはグローバルを格納できます。例えば:

$file_path = File.expand_path(__FILE__)

現在のプログラムの絶対パス

File.expand_path($0)似ていますが、呼び出されたプログラムを返します。区別は微妙な場合もありますが、時々役立つことがあります。

同じベース ディレクトリ内のファイルへの絶対パスの作成

現在のファイルの場所のディレクトリ名を使用して別のファイルをアドレス指定する場合は、File#join を使用できます。例えば:

File.join File.dirname(File.expand_path(__FILE__)), '.X11-unix'
=> "/tmp/.X11-unix"
于 2012-07-30T06:52:55.560 に答える
0

おそらく最善の方法ではありませんが、次のように config.ru を見つけることができます。

$:.find{|path| File.exists? "#{path}/config.ru"}
于 2012-07-30T08:30:35.820 に答える