Почему я получаю "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 9

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 /] промах, но ваше приложение будет работать правильно .