2013-07-18 4 views
1

После обновления до Rails 4 public/assets/manifest.yml больше не генерируется. Вместо этого присутствует другой отформатированный манифест (отпечаток пальца) .json. Но мне кажется, что сервер все еще ищет старый формат manifest.yml, игнорируя версию .json?Rails 4, Heroku не распознает прекомпилированный манифест (отпечаток пальца) .json

Я вижу другие вопросы, основанные на аналогичных проблемах, но они, похоже, опрокидываются путем обновления до Rails 4, добавляя rails_12factor в gem-файл, устанавливая serve_static_assets = true и т. Д., Но ни одно из этих решений, похоже, не имеет никакого эффекта в мой сценарий.

Я устал и не страдал из-за этой досадной проблемы, любая помощь будет оценена!

Logfile от Heroku:

ActionController::RoutingError (No route matches [GET] "/assets/layouts/test/test.html"): 

Gemfile:

ruby '2.0.0' 
gem 'rails', '4.0.0' 
... 
gem "compass-rails", github: "milgner/compass-rails", ref: "1749c06f15dc4b058427e7969810457213647fb8" 
... 
gem 'rails_12factor', group: :production 

production.rb

RailsFoundationAngular::Application.configure do 
    config.assets.initialize_on_precompile = false 
    config.cache_classes = true 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 
    config.serve_static_assets = true 
    config.assets.compress = true 
    config.assets.compile = false 
    config.assets.digest = true 
    config.i18n.fallbacks = true 
    config.active_support.deprecation = :notify 
    config.action_dispatch.x_sendfile_header = nil 
end 

Я использую Угловое и их UI-маршрутизатор, и это часть my routes.js.coffee, где связан файл test.html:

.state "root", 
     url: "/" 
     views: 
     "root": 
      controller: "ApplicationController" 
      templateUrl: "/assets/layouts/test/test.html" 

Я также попытался предварительно скомпилировать локально, но поскольку я использую Rails 4 здесь, я все равно не создал manifest.yml, а только версию .json. Конечно, все работает просто отлично в развитии ...

Так мой фактический cuestion: Как мне сделать Heroku распознавать и использовать manifest- (отпечатков пальцев) .json -file или альтернативные способы сделать эта работа?

+0

Теперь я нашел полезное обходное решение здесь: [нет совпадений маршрутов для активов/изображений в Rails] (http://stackoverflow.com/a/11128672/2597056). Переименовал route.js.coffee в routes.js.coffe.erb и связал файл как 'templateUrl:" <% = asset_path ('layouts/test/test.html')%> "'. Теперь мне просто нужно будет изменить каждую ссылку на файл в таком виде. На самом деле, я думал, что это именно то, что должен был сделать файл манифеста для меня? – RastacraZ

ответ

2

Ответ заключается в том, что Heroku уже распознает и использует манифест (отпечаток пальца) .json -file. «Обходной путь» в моем комментарии выше - это правильный способ ссылки на эти файлы, и, таким образом, файл манифеста используется так, как он используется.

Переименование файла с внутренней ссылкой на .erb и ссылкой на него следующим образом: templateUrl: "<%= asset_path('layouts/test/test.html') %>" делает трюк. Все внутренние файлы, изображения и html-файлы должны быть указаны так.

Это все описано очень подробно здесь: Asset-pipeline guide

Теперь кажется настолько простым и понятным, но я действительно потратил много времени, пытаясь получить неправильный путь вокруг этого с самого начала. Надеюсь, этот ответ может сэкономить время для кого-то другого.

+0

Не могли бы вы прояснить этот ответ? Как выглядели пути вашего актива до исправления? У меня такая же проблема, мой вопрос здесь: http://stackoverflow.com/questions/20555906/heroku-ignores-public-assets-manifest-json – nnyby

Смежные вопросы