jQuery Datepicker не работает на Heroku / Rails 3.1 - PullRequest
2 голосов
/ 22 января 2012

Привет всем,

Я очень разочарован jQuery Datepicker и Rails 3.1.Он отлично работает в моей среде разработки, но не работает в производственной среде на Heroku / Cedar.Он просто не появляется, когда я выбираю поле даты.

Итак, вот что я сделал до сих пор:Я помещаю файлы jquery в \ apps \ assets \ javascript :

  • jquery-1.7.1.min.js
  • jquery-ui-1.8.17.custom.min.js
  • jquery.ui.datepicker-de.js

, и я добавил их среди других файлов в свой production.rb :

# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) <br />
config.assets.precompile += %w( event_calendar.js event_calendar.css jquery-1.7.1.min.js jquery-ui-1.8.17.custom.min.js jquery-ui-1.8.17.custom.css jquery.ui.datepicker-de.js)

Затем я предварительно скомпилировал свои ресурсы локально , как описано здесь , и они правильно отображались в / public / assets / и в моем manifest.yml .Так что все выглядит хорошо, и я не получаю никаких ошибок при отправке приложения в Heroku, но когда я выбираю свое текстовое поле, связанное с указателем даты, ничего не происходит, оно просто не отображается.

Есть идеи, чтоможет быть здесь не так?Как я могу узнать, в чем проблема?

В журналах Heroku я могу найти только такие записи:

cache: [GET /assets/application-58ec8ec4b5384a8fb8d7884169385e49.css] miss

Буду рад, если кто-нибудь сможет помочь, пожалуйста.

Обновление:

Вот мой application.js:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

$(document).ready(
  function()
  {
    $("#picker").datepicker($.datepicker.regional['de']);
    $("#picker").datepicker();
  }
);

Насколько я знаю //= require_tree . заботится о включении всех файлов javascript в папку ресурсов, например \app\assets\javascripts\,Включает ли это предварительно скомпилированные активы в \public\assets ???

И вот мои application.css:

/*
 * This is a manifest file that'll automatically include all the stylesheets available in this directory
 * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
 * the top of the compiled file, but it's generally better to create a new file per style scope.
 *= require_self
 *= require_tree . 
*/
...

То же самое здесь, я думал, что *= require_tree . заботится о \app\assets\stylesheets так же как и о \public\assets, где находятся мои предварительно скомпилированные таблицы стилей.

Здесь ссылка на приложение на героку, при выборе поля даты должно всплыть календарь:http://smooth -window-1858.herokuapp.com / События / новый

Ответы [ 3 ]

2 голосов
/ 26 января 2012

Тем временем я узнал, что случилось с моим проектом.
Мне пришлось отключить сервер статических ресурсов Rails в \config\environments\production.rb:

config.serve_static_assets = true

Более того, мне пришлось добавить jquery-rails кмой Gemfile:

gem 'jquery-rails'

Теперь средство выбора даты работает нормально, и я удалил файлы jquery .js из /app/assets/javascript, потому что об этом позаботился гем.Тем не менее, я думаю, что файлы jquery добавляются в процессе предварительной компиляции ресурсов.Откуда они берутся?

И как может сработать прекомпиляция ресурсов (требуется Heroku), когда я просто ссылаюсь на Google CDN в своем макете, например:

  <%= stylesheet_link_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/redmond/jquery-ui.css", "application" %>
  <%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js", "application" %>
0 голосов
/ 23 января 2012

Вам не хватает файла CSS, а не файла JS, я думаю. Проверьте ошибку. Убедитесь, что jquery-ui-1.8.17.custom.css существует в папке таблиц стилей, также в вашей таблице стилей должна быть таблица стилей DatePicker, чтобы datepicker показывался.

Если ошибка все еще существует, вставьте сюда файл application.js и application.css.

0 голосов
/ 22 января 2012

Причина, по которой они, вероятно, не отображаются, заключается в том, что вы неправильно указали их в своих представлениях.

Добавление файлов для предварительной компиляции гарантирует, что имеется копия файлов, доступных для прямой ссылки в вспомогательном методе, но она не включает эти файлы в представления.

Если вы ссылаетесь на них в своих представлениях, вам нужно использовать вспомогательные методы Rails, а не жесткую ссылку на них. Помощники Rails обрабатывают вставку правильных рабочих имен файлов.

Обычный способ (лучшая практика) - запрашивать эти файлы в манифестах application.js и application.css.

Вы не должны видеть записи об отсутствии / попадании в кэш в вашем производственном журнале. Это указывает на то, что ваше приложение не использует предварительно скомпилированные файлы, а передает запросы в Sprockets.

Для этого есть две возможные причины: одна из них связана с жесткими ссылками на файлы (т.е. не используются вспомогательные методы), а вторая - конвейер настроен неправильно.

Сравните параметры конфигурации с параметрами, указанными в последнем разделе руководства по конвейеру активов .

Ответ на обновление и комментарий:

require_tree ИМПОРТИРУЕТ файлы в папке javascript и stylsheets в основные манифесты.

В случае вашего JS у вас будут все необходимые файлы в вашем application.js в указанном порядке. Ни один из этих обязательных файлов не будет существовать в public / assets, потому что они свернуты в манифест и не требуют отдельной предварительной компиляции (их можно удалить из массива прекомпиляции).

Вы должны быть конкретными только там, где важен порядок файлов - например, jquery и jquery ujs должны идти первыми в том порядке, в котором они у вас есть.

...