Elliott's Blog | Life Through Math, Algorithms and Code

Feb/10

19

ColdFusion Mappings and Relative Paths

Recently one of our applications started failing inconsistently with strange errors about certain files not existing. We’d see error emails about things like the /myapplication/views/pages/survey.cfm not existing which didn’t make any sense since /myapplication is a mapping created inside the Application.cfc

<cfset this.mappings["/myapplication"] = expandPath("../")>

See the bug there? ExpandPath() is relative to the requested template. This application had previously had all requests routed through /public/index.cfm so the mapping worked fine.

However, recently we had added some new web services like /public/services/ScheduleService.cfc and now whenever an Ajax request went through the CF mapping would change from pointing to / to /public causing all other concurrent requests to fail with confusing missing file errors.

I fixed this by making sure the path was no longer relative.

<cfset this.mappings["/myapplication"] = 
   getDirectoryFromPath(getCurrentTemplatePath())>

So the moral of the story is to NEVER use expandPath() to create a mapping that’s relative to the webroot.

No tags

No comments yet.

Leave a Reply

<<

>>

Theme Design by devolux.nh2.me