Почему я получаю "cache: [GET /] miss" в производстве с использованием WebRick?
Я не могу протестировать свой веб-сайт в рабочем режиме с помощью WebRick, так как он вызывает ошибки кэша. В режимах разработки и тестирования все работает идеально.
Я установил этот параметр в config / environments / production.РБ:
config.serve_static_assets = true
А потом я побежал:
bundle exec rake assets:precompile
Теперь я запускаю сервер:
david$ rails s -e production
=> Booting WEBrick
=> Rails 3.2.1 application starting in production on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-01-31 19:52:35] INFO WEBrick 1.3.1
[2012-01-31 19:52:35] INFO ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0]
[2012-01-31 19:52:35] INFO WEBrick::HTTPServer#start: pid=13329 port=3000
И когда я пойду в http://localhost:3000 я получаю: "мы сожалеем, но что-то пошло не так.". В терминале это то, что он выводит:
cache: [GET /] miss
Я в тупике. здесь. Я понятия не имею, что делать.
4 ответа:
Проблема заключается в конвейере активов,который должен быть хорошо сконфигурирован в рабочем режиме, так как файлы не компилируются автоматически.
В моем случае я вставлял файл javascript (с
javascript_include_tag
), который присутствовал только на одной странице, поэтому он не был включен в приложение.JS манифест.В этом случае конвейер ресурсов не выполняет предварительную компиляцию файла при запуске
assets:precompile
.Чтобы включить отсутствующий файл, мы должны отредактировать
config/environments/production.rb
и добавить это строка:Вы заметите, что эта строка уже существует, но она прокомментирована. Прочитайте комментарий для получения дополнительных разъяснений. Для получения дополнительной информации, посмотрите на официальное руководство трубопроводных активов.config.assets.precompile += %w( script1.js )
Это сообщение о недостающих страницах отправляет Rack::Cache middleware. Если вам не нужно использовать кэширование страниц в приложении rails, просто удалите Rack:: Cache в config / application.файл rb:
require 'rack/cache' module DemoApp class Application < Rails::Application config.middleware.delete Rack::Cache # ... end end
В качестве предварительного решения, следующее сделало трюк для меня.
Я изменил файл
config/environments/production.rb
, чтобы изменить строкуconfig.assets.compile
сfalse
наtrue
# Don't fallback to assets pipeline if a precompiled asset is missed config.assets.compile = true
Для запуска приложения в рабочей среде, чтобы не получить кэш: [GET /] miss Пожалуйста, проверьте вы {проекта}/публичных папку их любую папку assets существует если нет, то предварительно скомпилируйте активы с помощью bundle exec rake assets: precompile
Как только это будет сделано:
Set config.активы.компиляция в true в производстве.rb
Затем перезагрузите веб-приложение в рабочей среде .
Этот подход сработал для меня, надеюсь, сработает и для вас. .
Если вы используете rails 3.2.0, вы получите [GET /] промах, но ваше приложение будет работать правильно .