Подтвердить что ты не робот

Ruby On Rails 3.1 - контейнер активов - активы, предоставленные дважды

Большое обновление:

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

Проблема: Это из-за конвейера активов Rails 3.1

На самом деле... Это простой: активы были дважды предоставлены в среду разработки. Выполнение многих исследований свидетельствует о том, что мой сервер Rails 3.1 предоставлял активы из папок "приложение/активы" и "общедоступные/активы". Итак, у меня были дублированные файлы .js и .css, которые разбивали все мои javascript-анимации (да... привязка дважды к одному и тому же событию и обработчик к одному и тому же элементу - это не то, что вы хотите... обычно).

И если проблема возникла внезапно, это было связано с тем, что мне пришлось запускать "rake assets: precompile" для развертывания моего приложения. С тех пор, когда мое приложение выполнялось в процессе разработки, сервер выполнял рендеринг статических прекомпилированных активов и динамических предварительно скомпилированных активов.

Решение (теперь лучше несколько строк ниже), но вы все равно можете прочитать его

Первый: мне просто пришлось удалить все предварительно скомпилированные активы из моей общей папки.

Лучше один: добавьте config.serve_static_assets = false в development.rb, что предотвратит загрузку файлов из /public/assets. Кроме того, не забудьте reset кеш браузера.

[Редактировать: 20 июля 2012]

Продвинутый: у меня недавно возникла новая проблема из-за этих статических активов. Знаете, когда вы используете скрепку или какой-либо другой драгоценный камень, и они добавляют ваши изображения в общую папку в какой-то системной подпапке, потому что лучше, если вы хотите развернуть свое приложение с помощью capistrano. Ну, это здорово, но! Поскольку мы добавили config.serve_static_assets = false, эти изображения не отображаются в разработке и это плохо, если вы хотите сделать некоторые css на них. Так! Что делать тогда?

Ну, на самом деле вам придется включать статические активы в развитие следующим образом:

# Expands the lines which load the assets
config.assets.debug = true
config.serve_static_assets = true

Затем, чтобы рельсы не отображали ваши другие активы дважды (прекомпилированные), просто выполните эту команду:

rake assets:clean

Это противоположность rake assets: precompile и очистит вашу папку public/assets так, чтобы Rails не выдавал ваши активы дважды. Конечно, вам все равно придется очищать кеш браузера и очищать свои активы каждый раз, когда вы их предварительно скомпилировали.

[Редактировать: 18 ноября 2013] - От ответа @idejuan

Другое решение:

Вы можете добавить эту строку:

config.assets.prefix = '/dev/assets'

В development.rb, где префикс может быть любым, что вы хотите. Скрипты больше не будут загружаться, а изображения в /public/system будут прочитаны! Но будьте осторожны, так как он изменяет путь к вашим "статическим" активам... если вам нужны активы из драгоценного камня, он может не загружать их должным образом в процессе разработки...

[Редактирование конца]

Оставшийся вопрос с ответом!

Хорошо, почему мое приложение для разработки создавало статические прекомпилированные активы?

Фактически, если вы предварительно скопируете свои активы локально, рельсы выдают активы из общей папки И из папки с ресурсами в среде разработки и тестирования по умолчанию. Обычно активы из общей папки должны перезаписывать их из папки с ресурсами, но это не так, и даже если это произойдет, мы потеряли бы преимущества "debug_mode", поскольку нам приходилось каждый раз перекомпилировать активы. Итак... Активы отображаются дважды, когда они предварительно скомпилированы локально в среде разработки и тестирования.

Итак, добавив в файл development.rb файл "config.serve_static_assets = false", вы каким-то образом перезапишите строку по умолчанию, в которой Rails будет выглядеть в вашей общей папке для активов. Надеюсь, в один прекрасный день они сделают что-то более чистым в отношении локально прекомпилированных активов.

Спасибо тем, кто помогал мне в моих расследованиях:).

Kulgar.

4b9b3361

Ответ 1

Вы можете посмотреть

fooobar.com/questions/146698/...

"Добавление config.serve_static_assets = false в development.rb предотвратит загрузку файлов из /public/assets "

Я думаю, что это лучшее решение, чем вы предлагаете здесь.

Ответ 2

У меня была такая же проблема, и я нашел легкое решение/взломать ее. Я просто добавил эту строку:

config.assets.prefix = '/dev/assets'

to development.rb, где префикс может быть любым, что вы хотите, я помещаю /dev/assets, чтобы избежать дальнейших путаниц.

Скрипты больше не загружаются дважды, и я могу использовать изображения, которые у меня есть в /public/system, которые невозможно прочитать, когда я попробовал решение config.serve_static_assets = false

До сих пор я не нашел недостатков в этом решении. Надеюсь, он вам и послужит!

Ответ 3

Я не понимаю, почему обновление Ubuntu будет иметь какое-либо отношение к вашему JavaScript. Вы используете статический JavaScript? Динамический JavaScript? CoffeeScript? Если один из последних двух, я полагаю, возможно, что обновление сломало один из инструментов, обрабатывающих ваш JS...

Некоторые вещи, которые нужно попробовать:

  • Просмотрите источник JavaScript в своем браузере. Убедитесь, что тот же исходный код достигает вашего браузера.
  • Попробуйте запустить приложение Rails в другой системе (возможно, установите вторую виртуальную машину с другой версией Ubuntu и посмотрите, можете ли вы реплицировать проблему).
  • Удостоверьтесь, что точно такая же версия кода приложения находится в обоих местах.

Ответ 4

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

rails server -e production

Если проблема исчезнет, ​​она связана с вашими настройками конфигурации для "среды разработки".