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

更新:

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

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 回答