Мой вопрос похож на этот Rails 3.2. Конвейер активов с бесконечными ошибками пассажиров за исключением того, что когда я пытаюсь перейти на
<link href="/assets/application-eed7996ee9017637f923133371ab3e92.css" media="all" rel="stylesheet" type="text/css" />
Я получаю 404. Вот вещь, которую я не понимаю. Он ищет в / assets /, но когда я смотрю на развернутый код, ресурсы находятся только в / public / assets, что фактически является символической ссылкой на / var / www / myapp / shared / assets. Так что же в мире отвечает за то, чтобы приложение сообщало, что поиск в / assets даст правильные результаты ??
Я использую Rails 3.2.0, ruby-1.9.3-p125, развертывание в Ubuntu, Apache и Thin.
Я должен уточнить: Мои активы действительно развернуты на сервере. Все работает отлично, пока их не нужно обслуживать, и в этом случае production.log сообщает, что ищет их в /assets/application-eed7996ee9017637f923133371ab3e92.css, что на 404-х.
Для каждого запроса мой thin.log говорит
cache: [GET /] miss
и production.log говорит
ActionController::RoutingError (No route matches [GET] "/assets/application-abecf2e096af9ee80697fd49e79a55e7.js"):
UPDATE
@Brandan спасибо за помощь. Мои активы действительно в RAILS_ROOT/public/assets
. Я поместил это в мой файл Apache vhost:
DocumentRoot /var/rails/myappname/current/public
RewriteEngine On
XSendFile On
XSendFilePath /var/rails/myappname #not even sure if this line is needed
<LocationMatch "^/assets/.*$">
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault "access plus 1 year"
</LocationMatch>
My RAILS_ROOT / config / environment / production.rb настройки:
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = false
config.assets.digest = true
config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache