Рендеринг Rails генерирует странный, слегка неверный контент - PullRequest
2 голосов
/ 05 августа 2011

У меня есть приложение, которое содержит простые html-страницы для людей. Некоторые из которых используют таблицы для оформления макета. (Не я, клянусь!) По какой-то таинственной причине, рендер ломает эти макеты в Internet Explorer.

Вот самый простой способ воспроизвести проблему.

Когда я сохраняю html-файл в public / и получаю к нему доступ через Mongrel, он прекрасно работает во всех браузерах. Если я использую следующий код для рендеринга файла, он становится прикольным:

render :file => '[app_directory]/public/sample.html'

Internet Explorer создает пустой текстовый узел для каждой новой строки, что приводит к пробелам в таблице. Необработанный html, по-видимому, идентичен , но при использовании с рендерингом он каким-то образом изменяется таким образом, что делает Internet Explorer несчастным.

Я был бы ужасно благодарен за любые указания о том, как это остановить. Спасибо!

Редактировать 1: Тайна углубляется ...

Я понял, как заставить Chrome иметь ту же ошибку. Вот код, который работает в Chrome и не работает в IE:

# tab_controller.rb
render :inline => tab.public_html

Но когда я изменяю это, чтобы использовать внешний шаблон ERB, странный пробел также появляется в Chrome:

# tab_controller.rb
@html = tab.public_html
render 'show'

# show.erb
<%=raw @html %>

Я уверен, что этому есть объяснение, но чем больше я копаю незнакомца, тем больше оно получает.

Редактировать 2: Заголовки

Вот заголовки ответа, которые IE дает для статически обслуживаемого файла:

Response        HTTP/1.1 200 OK
Connection      close
Date            Fri, 05 Aug 2011 00:33:20 GMT
Last-Modified   Thu, 04 Aug 2011 23:38:21 GMT
Content-Type    text/html
Content-Length  913

А вот заголовки ответа, которые IE дает для контента, создаваемого с помощью render. Содержание, которое имеет проблемы:

Response         HTTP/1.1 200 OK
Connection       close
Date             Fri, 05 Aug 2011 00:28:18 GMT
Content-Type     Text/html
X-UA-Compatible  IE=Edge
ETag             "43d392ddbbcf3856ced3de672005c26f"
Cache-Control    max-age=0, private, must-revalidate
Set-Cookie       _rails_static_html_session=[session stuff]; path=/; HttpOnly
X-Runtime        31.964569
Transfer-Encoding   chunked

Редактировать 3: Код

Вы можете (я надеюсь) воспроизвести проблему, поместив следующий код в любой произвольный контроллер:

html = "<html>\n<head>\n</head>\n\n<body>\n<table width='520' height='870' border='0' cellpadding='0' cellspacing='0'>\n  <tr>\n    <td align='center' valign='top'><div align='center'>\n      <table width='520' border='0' cellspacing='0' cellpadding='0'>\n        <tr>\n          <td><img src='.' width='520' height='314' /></td>\n        </tr>\n        <tr>\n          <td><img src='.' width='520' height='320' /></td>\n        </tr>\n        <tr>\n          <td><img src='.' width='520' height='166' /></td>\n        </tr>\n        <tr>\n          </tr>\n      </table>\n    </div></td>\n  </tr>\n</table>\n</body>\n</html>"

render :inline => html
File.open('/railsappdirectory/public/sample_html.html', 'w') {|f| f.write(html) }

Когда вы обращаетесь к нему через Internet Explorer через приложение rails, между изображениями будут пропуски. Когда вы просматриваете html-файл как статический ресурс, пропусков не будет.

1 Ответ

1 голос
/ 06 августа 2011

Я использовал простой php-файл для обслуживания одного и того же контента с разными заголовками и обнаружил, что следующие заголовки направляющих вызывали проблему:

X-UA-Compatible: IE=Edge

Комментарий к этому вопросу объяснил, как остановить рельсы для обслуживания этого заголовка. В файлах config / environment / *. Rb убедитесь, что следующий параметр имеет значение false:

config.action_dispatch.best_standards_support = false

Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...