Вопрос или проблема
Заранее спасибо за любую помощь или подсказки, которые кто-либо сможет предложить.
У меня проблема с компиляцией ресурсов в моем локальном окружении — они больше не находятся. Я не уверен, как это произошло, но если я запускаю rails assets:precompile
, то последняя версия моего JavaScript и CSS становится доступной. При попытке сбросить настройки, чтобы Rails компилировал ресурсы в режиме реального времени, я сделал следующее:
Я выполнил rails assets:clobber
Я проверил в своем environment/development.rb
, что у меня есть следующие настройки (по сути, я перерывал случайные посты на Stack Overflow и пробовал все способы отключить кэширование):
config.assets.compile = true
config.cache_classes = false
config.assets.check_precompiled_asset = false
config.action_controller.perform_caching = false
config.action_controller.enable_fragment_cache_logging = false
config.cache_store = :null_store
Когда я смотрю консоль отладки Chrome, я вижу эту ошибку:
localhost/:1 Отказано в выполнении скрипта с 'http://localhost:3000/' из-за того, что его MIME-тип ('text/html') не является исполняемым, и строгая проверка MIME-типа включена.
И я вижу в сетевых запросах следующий запрос:
URL запроса: http://localhost:3000/assets/application-4715fb6ab7ed9d0e2856431daf6257fbe7f65970d0fdde5c07720f54c8b9258c.css
Метод запроса: GET
Код состояния: 302 Найдено
Удаленный адрес: [::1]:3000
Политика ссылки: strict-origin-when-cross-origin
Заголовки ответа:
cache-control: no-cache
content-length: 0
location: /
server-timing: sql.active_record;dur=0.24, instantiation.active_record;dur=0.02
x-request-id: 1422221c-a466-459d-9793-e34158e4782d
x-runtime: 0.041250
Я также обнаружил, что если я изменю CSS-файл и перезапущу сервер, хэш из application-4715fb6ab7ed9d0e2856431daf6257fbe7f65970d0fdde5c07720f54c8b9258c.css
изменится. Так что я предполагаю, что по какой-то причине Rails продолжает искать предкомпилированную версию и не компилирует ее?
Я также попробовал config.assets.digest = false
, что заставило сетевой запрос искать http://localhost:3000/assets/application.css
, который также не был найден.
некоторые соответствующие файлы
manifest.js
//= link_tree ../builds
//= link_tree ../images
//= link_directory ../stylesheets/administrate .css
//= link administrate-field-active_storage/application.css
assets/builds:
application.css | application.css.map | application.js | application.js.map
и когда я запускаю свой локальный сервер, я вижу
$ tailwindcss --postcss --minify -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --watch
в логах
еще раз спасибо за помощь!!!
Ответ или решение
Чтобы настроить локальную среду разработки на Rails без использования кэшированных ресурсов, вам необходимо учесть несколько ключевых аспектов конфигурации и структуры вашего проекта. В данном ответе мы рассмотрим общие методы, как избежать проблем с кэшированием и обеспечить корректную сборку ассетов в режиме разработки.
1. Обновление конфигурации
Сначала убедитесь, что вы правильно настроили config/environments/development.rb
. Основные параметры, касающиеся кэширования асетов, должны быть следующими:
config.assets.compile = true
config.assets.digest = true # Оставьте это значение по умолчанию, чтобы использовать дайджесты
config.assets.check_precompiled_asset = false
config.action_controller.perform_caching = false
config.cache_classes = false
config.cache_store = :null_store
Обратите внимание, что config.assets.digest = true
— это стандартная практика, которая помогает избежать проблем с кэшированием на стороне клиента.
2. Очистка кэша асетов
Если вы уже выполняли команду rails assets:clobber
, это должно удалить все предварительно скомпилированные ассеты. Чтобы гарантировать, что всё работает корректно, вы можете также попробовать удалить папку public/assets
. Это обеспечит, что Rails не будет использовать предшествующие версии файлов.
3. Запуск сервера в режиме разработки
Убедитесь, что вы запустили сервер в режиме разработки. Используйте команду:
rails server
Это гарантирует, что все изменения в вашем CSS и JavaScript будут подхватываться без необходимости предварительной компиляции.
4. Изменение структуры ассетов
Проверьте вашу структуру асетов, чтобы убедиться, что все ваши стилей и скрипты правильно подключены. В вашем manifest.js
убедитесь, что указываете правильные пути к ассетам:
//= link_tree ../builds
//= link_tree ../images
//= link_directory ../stylesheets .css
Убедитесь, что все указанные файлы действительно существуют и доступны по указанным путям.
5. Проверка ошибок в консоли разработчика
Ваше сообщение об ошибке из консоли браузера указывает на неправильный MIME-тип. Это может происходить из-за неправильного обращения к URL ассетов. Вы можете попробовать открыть URL, который выдаёт 302, чтобы выяснить, куда он перенаправляет. Это может помочь выявить проблему с маршрутизацией.
6. Проверка пакета Tailwind CSS
Ваши логи показывают, что вы используете Tailwind CSS с командой, которая следит за изменениями. Убедитесь, что Tailwind правильно настроен для работы в режиме разработки:
tailwindcss --postcss --minify -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --watch
Следите за ошибками в этой команде и убедитесь, что Tailwind CSS корректно обрабатывает ваши файлы CSS без возникновения ошибок или загадочных проблем с кэшированием.
7. Использование и адаптация
Если всё вышеуказанное не сработает, попробуйте временно отключить генерирование дайджестов, установив config.assets.digest = false
и убедитесь, что ресурсы доступны по привычным URL. Это может помочь выявить, не является ли проблема причиной зависимости от хешированных имён файлов.
Заключение
Используя указанные шаги и рекомендации, вы сможете настроить локальную среду разработки Rails таким образом, чтобы она не использовала кэшированные ресурсы. Тем не менее, если проблема сохраняется, проделайте шаги по их диагностике, проверяя конфигурации и доступность файлов. Если вам потребуется дополнительная помощь, обязательно обратитесь к сообществу разработчиков, которое может предоставить поддержку и советы на основе вашего опыта.