我正在创建一个作为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__))
答案 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"}