#440 new
Ross MacCharles

Windows File Loading

Reported by Ross MacCharles | June 17th, 2008 @ 03:56 PM

After upgrading to Rails 2.1.0 I noticed that when running on Windows XP Pro I could no longer see icons on the UI. All is well when running on Linux.

Viewing the source in the browser revealed that my image file names contained an extra .

For some reason, Windows accepts the file name foo.png. (with a trailing .) as equivalent to foo.png (no trailing .). On Windows, File.exist?("foo.png.") returns true if foo.png exists.

This causes a problem AssetTagHelper::compute_public_path. This line:

source += ".#{ext}" if ext && File.extname(source).blank? || File.exist?(File.join(ASSETS_DIR, dir, "#{source}.#{ext}"))

will add a . to source if ext is nil because the || clause returns true on windows.

A fix that seems to work is to rework the logic with a couple of extra brackets which probably reflect the intended behavior of the statement:

source += ".#{ext}" if ext && (File.extname(source).blank? || File.exist?(File.join(ASSETS_DIR, dir, "#{source}.#{ext}")))

After the change, a nil ext drops out immediately.

Comments and changes to this ticket

  • rasmus

    rasmus August 1st, 2008 @ 06:08 AM

      • → Tag changed from “” to “2.1 actionpack bug”

    Hi,

    We came across the same problem, and thought that the correct solution maybe was to replace the OR with an AND. With the line resulting to:

    source += ".#{ext}" if ext && File.extname(source).blank? && File.exist?(File.join(ASSETS_DIR, dir, "#{source}.#{ext}"))

  • Andreas

    Andreas August 4th, 2008 @ 11:53 AM

    The patch above is incorrect, it breaks javascript_include_tag for js being served by a controller. I believe the intended logic is to check that ext is defined for both statements separately (that works anyway):

    source += ".#{ext}" if (ext && File.extname(source).blank?) || 
                           (ext && File.exist?(File.join(ASSETS_DIR, dir, "#{source}.#{ext}")))
    

Please Login or create a free account to add a new comment.

You can update this ticket by sending an email to from your email client. (help)

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

Source available from github

The Git repository resides at http://github.com/rails

Check out the current development trunk (Edge Rails) with:

git clone git://github.com/rails/rails.git

The latest development for the 1.2.x and 2.0.x releases are on the 1-2-stable and 2-0-stable branches.

Creating a bug report

When creating a bug report, be sure to include as much relevant information as possible. Post the code sample that causes the problem. Preferably, alter the unit tests and show through either changed or added tests how the expected behavior is not occuring.

Security vulnerabilities should be reported via an email to security@rubyonrails.org, do not use trac for reporting security vulnerabilities. All content in trac is publicly available as soon as it is posted.

Then don't get your hopes up. Unless you have a "Code Red, Mission Critical, The World is Coming to an End" kinda bug, you're creating this ticket in the hope that others with the same problem will be able to collaborate with you on solving it. Do not expect that the ticket automatically will see any activity or that others will jump to fix it. Creating a ticket like this is mostly to help yourself start on the path of fixing the problem and for others to sign on to with a "I'm having this problem too".

Shared Ticket Bins

People watching this ticket