Используйте FileUtils для обработки всех этих головных болей.
Изменить: например, используйте нижеприведенный код для записи в файл, этот метод будет «проверять и создавать родительский каталог, если он не существует».
openOutputStream(File file [, boolean append])
Вы можете использовать ActionController :: Routing :: Routes.recognize_path
, в зависимости от формата URL:
>> ActionController::Routing::Routes.recognize_path("/accounts/1",:method=>:get)`
# {:action=>"show":controller=>"accounts",:id=>"1"}