我有一个像这样的代码的宝石:
def read(file) @file = File.new file,"r" end
现在的问题是,你有一个像这样的目录结构:
app/main.rb app/templates/example.txt
和main.rb具有以下代码:
require 'mygem' example = MyGem.read('templates/example.txt')
它找到了File Not Found:templates / example.txt.如果example.txt与main.rb位于同一目录中,但如果它位于目录中则不行.为了解决这个问题,我在read()中添加了一个名为relative_to的可选参数.这需要一个绝对路径,所以上面可能需要:
require 'mygem' example = MyGem.read('templates/example.txt',File.dirname(__FILE__))
解决方法
有一个有趣的图书馆 –
i told you it was private.人们可以保护他们的方法免受外界的呼叫.代码查找调用方法的文件并将其删除.使用此行找到罪犯:
offender = caller[0].split(':')[0]
我想你可以在你的MyGem.read代码中使用它:
def read( file ) fpath = Pathname.new(file) if fpath.relative? offender = caller[0].split(':')[0] fpath = File.join( File.dirname( offender ),file ) end @file = File.new( fpath,"r" ) end
这样你可以使用相对于你的Mygem调用者而不是pwd的路径.正是你在app / main.rb中尝试的方式