Ruby:如何找到相对于实例化类的路径?

时间:2012-07-30 06:41:26

标签: ruby

我正在创建一个作为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's config.ru的用户:

require 'my_app'
run MyApp.new

...及其观点目录:

/views
   index.erb

更新

实现此目的的一种方法是将基本路径作为参数传递,但我想找到一种方法来实现它,而不将其作为参数传递。

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

可能不是最好的方法,但你可以找到config.ru:

$:.find{|path| File.exists? "#{path}/config.ru"}