activeadmin heroku Конфигурация таблицы стилей с частичным исправлением - PullRequest
8 голосов
/ 30 марта 2012

Я получал следующее сообщение об ошибке после локальной компиляции своих ресурсов и передачи кода в Heroku:

2012-03-28T17:06:01+00:00 app[web.1]: Started GET "/admin/login" for 67.163.67.203 at 2012-03-28 17:06:01 +0000

2012-03-28T17:06:01+00:00 app[web.1]: 

2012-03-28T17:06:01+00:00 app[web.1]: ActionView::Template::Error (File to import not found or unreadable: active_admin/mixins.

2012-03-28T17:06:01+00:00 app[web.1]: Load paths:
2012-03-28T17:06:01+00:00 app[web.1]:   /app
2012-03-28T17:06:01+00:00 app[web.1]:   /app/vendor/bundle/ruby/1.9.1/gems/activeadmin-0.4.3/app/assets/stylesheets
2012-03-28T17:06:01+00:00 app[web.1]:   (in /app/vendor/assets/stylesheets/active_admin.css.scss)):
2012-03-28T17:06:01+00:00 app[web.1]:     7: 
2012-03-28T17:06:01+00:00 app[web.1]:     6:   <title><%= [@page_title, active_admin_application.site_title].compact.join(" | ") %></title>
2012-03-28T17:06:01+00:00 app[web.1]:     8:   <% ActiveAdmin.application.stylesheets.each do |style| %>
2012-03-28T17:06:01+00:00 app[web.1]:     9:     <%= stylesheet_link_tag style.path, style.options %>
2012-03-28T17:06:01+00:00 app[web.1]:     10:   <% end %>
2012-03-28T17:06:01+00:00 app[web.1]:     11:   <% ActiveAdmin.application.javascripts.each do |path| %>
2012-03-28T17:06:01+00:00 app[web.1]:     12:     <%= javascript_include_tag path %>
2012-03-28T17:06:01+00:00 app[web.1]:   vendor/assets/stylesheets/active_admin.css.scss:2

...

Я испробовал множество различных опций, включая следующий совет, который я нашел здесь - http://mrdanadams.com/2011/exclude-active-admin-js-css-rails/ и другие на странице GitHub.

Ни один из этих вариантов не работал. В конечном итоге я получил несколько советов по удалению моего каталога public / assets из git, передаче кода в Heroku и разрешению Heroku предварительно скомпилировать ресурсы. Этот подход частично сработал. Я больше не получаю сообщение об ошибке при попытке перейти на страницу / admin моего сайта. Однако CSS-файлы active_admin отсутствуют. Он подозревает, что поскольку Heroku выполнил прекомпиляцию, он не выдает ошибку, даже если файлы active_admin.css не прекомпилируются. Как получить предварительно скомпилированный active_admin.css?

Кстати, я бегу по рельсам 3.2.

РЕДАКТИРОВАТЬ:

Похоже, что мое "исправление" не было завершено. Если у меня есть require_tree. или require_directory. тогда в моем application.css он работает, но он портит CSS моих основных приложений, потому что все они скомпилированы в application.css. Если у меня нет одной из этих записей, то она сломается. Любые мысли о том, как я могу решить это?

Ответы [ 6 ]

15 голосов
/ 05 апреля 2012

Мне наконец удалось решить эту проблему.В случае, если кто-то столкнется с этой проблемой, я подумал, что запишу шаги, которые я предпринял для ее решения.

Я запустил свое приложение локально в рабочем режиме (RAILS_ENV=production rails s) и смог скопировать ошибку, полученную в Heroku на моей локальной машине.

Я скопировал мои active_admin.css.scss и active_admin.js в каталог / vendor / assets.Поскольку y app постоянно говорил мне, что в нем отсутствует active_admin / mixins, я также скопировал весь каталог active_admin в assets в каталог vendor / assets.Я не уверен, если это необходимо или нет.

Мне сказали, что с точки зрения Heroku, но я не могу подтвердить, что во время прекомпиляции production.rb не читается, поэтому все параметры должны быть определены в application.rb.Итак, я позаботился о том, чтобы у меня были следующие настройки в application.rb -

#Added to fix devise/active admin issue ?
config.assets.initialize_on_precompile = false

# Precompile additional assets. Defaults to [application.js, application.css, non-JS/CSS]
config.assets.precompile += ['active_admin.css.scss', 'active_admin.js'] 

Я нашел большинство вышеупомянутых советов по сети (на stackoverflow, heroku, github и т. Д.).Часть, которую я не видел, была необходимость внести изменение Bundler.require в application.rb с:

Bundler.require(*Rails.groups(:assets => %w(development test)))

на:

Bundler.require(:default, :assets, Rails.env)

Как только я внес эти изменения, я могвставьте код в Heroku и дайте ему прекомпилировать ресурсы для меня.Я надеюсь, что это может помочь кому-то сэкономить время в решении этой проблемы.

11 голосов
/ 31 марта 2012

Вы на правильном пути, позволяя Heroku собирать ресурсы для вас. Это делает вещи проще.

Чтобы включить дополнительные файлы в манифест прекомпилятора, используйте что-то вроде этого в конфигурации вашего приложения (config/application.rb или config/environments/production.rb):

# Precompile additional assets. Defaults to [application.js, application.css, non-JS/CSS]
config.assets.precompile += ['active_admin.css', 'active_admin/print.css', 'active_admin.js']
7 голосов
/ 16 марта 2013

ActiveAdmin github wiki решает эту проблему специально: https://github.com/gregbell/active_admin/wiki/Heroku-Cedar-deployment-with-the-Asset-Pipeline

Вот что написано на момент написания:


  1. Попробуйте добавить ресурсы AA в список прекомпиляций в application.rb ( ПРИМЕЧАНИЕ: НЕ МОЖЕТЕ добавить их в production.rb, Heroku НЕ читает production.rb во время прекомпиляции!)

    # config/application.rb
    config.assets.precompile += %w( active_admin.css active_admin.js active_admin/print.css )
    
  2. Попробуйте поместить active_admin.css.scss и active_admin.js в vendor/assets вместо app/assets. Это предотвращает непреднамеренное включение ресурсов AA, когда вы используете директиву звездочек require_tree .. Это директива звездочек по умолчанию в application.css для нового приложения rails, и именно поэтому многие люди не понимают, нужны ли ресурсы AA во всех частях их сайта. Помещение ресурсов AA в vendor/assets предотвращает эту проблему, но вы также можете поместить его в подкаталог app/assets и избегать использования директивы require_tree (вместо этого выберите require_directory).

  3. Убедитесь, что sass-rails доступен при предварительной компиляции. Для этого необходимо убедиться, что во время прекомпиляции требуется либо группа ресурсов, либо сделать доступным sass-rails во всех группах драгоценных камней. Часто обновления более старых версий Rails не будут содержать правильное заявление Bundler require, поэтому важно проверить, не запускали ли вы свой проект на Rails 3.1+. Если вы можете запустить bundle exec rake assets:precompile RAILS_ENV=production на своей машине без ошибок и с настроенным поддельным производственным БД, тогда у вас все хорошо.

  4. Настройте специфичные для heroku конфигурации, как указано в их FAQ о развертывании с использованием конвейера ресурсов:

    # config/application.rb - NOT production.rb
    config.assets.initialize_on_precompile = false
    
5 голосов
/ 25 мая 2012

Была такая же проблема.Исправлено добавлением следующего к production.rb для прекомпиляции дополнительных ресурсов:

config.assets.precompile += %w( active_admin.css active_admin.js)
2 голосов
/ 23 мая 2014

Вместо того, чтобы хранить список файлов, я исправил проблему, изменив флаг в production.rb:

config.assets.compile = true
0 голосов
/ 03 августа 2012

Я обнаружил, что могу решить эту проблему, обновив свой гемфайл - переместив гем 'sass-rails' из группы: assets в производственный или общий раздел.

Очевидно, что это проблема, когда Heroku нужен драгоценный камень saas-rails или он что-то ломает, поэтому он говорит: http://ygamretuta.me/2011/10/02/setting-up-active-admin-on-heroku-with-rails-3-1-and-cedar/

...