I'd prefer using Pathname:
require 'pathname' # pathname is in stdlib
Pathname(ROOT_DIR) + project + 'App.config'
about <<
and +
from ruby docs:
+: Returns a new String containing other_str concatenated to str
<<: Concatenates the given object to str. If the object is a Fixnum between 0 and 255, it is converted to a character before concatenation.
so difference is in what becomes to first operand (<<
makes changes in place, +
returns new string so it is memory heavier) and what will be if first operand is Fixnum (<<
will add as if it was character with code equal to that number, +
will raise error)