atomic_write (ActiveSupport::CoreExtensions::File::Atomic)

    # File lib/active_support/core_ext/file/atomic.rb, line 20
            def atomic_write(file_name, temp_dir = Dir.tmpdir)
              temp_file = Tempfile.new(basename(file_name), temp_dir)
              yield temp_file
              temp_file.close

              begin
                # Get original file permissions
                old_stat = stat(file_name)
              rescue Errno::ENOENT
                # No old permissions, write a temp file to determine the defaults
                check_name = ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}"
                open(check_name, "w") { }
                old_stat = stat(check_name)
                unlink(check_name)
              end

              # Overwrite original file with temp file
              rename(temp_file.path, file_name)

              # Set correct permissions on new file
              chown(old_stat.uid, old_stat.gid, file_name)
              chmod(old_stat.mode, file_name)
            end