2012-09-27 12 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