2012-09-27 11 views
3

我正在写一个ruby gem,我想让用户使用自己的yaml文件配置,但我不知道如何测试user_config.yml是否存在到rails配置中路径。
只有当这个文件存在到配置路径中时,我才想使用user_config.yml。如何在rails配置路径中访问yaml

回答

11

Rails.root(或在早期版本的Rails中的RAILS_ROOT)为您提供了应用程序根目录的路径。从那里,你可以看到你感兴趣的文件是否存在。

例如

path = File.join(Rails.root, "config", "user_config.yml") 
if File.exists?(path) 
    # do something 
end 
+2

这几天你可能会使用'Rails.root.join('config','user_config.yml')' – Confusion

1

您可以使用Array类型的$ LOAD_PATH变量来访问Rails应用程序的加载路径。

因此

if $LOAD_PATH.include?('/path/where/user/should/put/their/user_config.yml') 
    # EDIT 
    config_options = File.new('rails_app/config/user_config.yml', 'r') 
else 
    # EDIT 
    config_options = File.new('path/to/default/config.yml', 'r') 
end 

还有用于Ruby File class称为#exists另一种有用的方法?这当然会检查文件是否存在。有关更多信息,请参阅File class docs。

希望这能让你开始。你的问题相当模糊,如果你需要更多的帮助,请回复更多细节。

+0

对不起,这很难解释。如果我将user_config.yml放入配置路径(rails_app/config/user_config.yml),我该如何访问该文件?我可以使用类似的东西:YAML.load_file(“#{$ LOAD_PATH} /config/user_config.yml”)? – squiter

+0

正如我在我的原始答案中所说的,$ LOAD_PATH变量是一个数组,所以你不想使用字符串插值。有关加载文件的建议,请参阅我的回答中的编辑。 –

+0

@BrunnoDosSantos为了从你的yaml中得到一个散列,你的确可以使用YAML模块。 'configs_hash = YAML.load_file(“path/to/config.yml”)[RAILS_ENV]',其中'RAILS_ENV'是'development','test'等。 – cdesrosiers