activeadmin heroku样式表配置问题与部分修复

时间:2012-03-29 21:04:17

标签: ruby-on-rails-3 heroku activeadmin

我在本地预编译资产然后将代码推送到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页面上的其他提示。

这些选项都没有奏效。最后,我收到了一些建议,要从git中删除我的公共/资产目录,将代码推送到Heroku,让Heroku预编译资产。这种方法部分奏效。当我尝试访问我的网站的/ admin页面时,我不再收到错误消息。但是,缺少active_admin CSS文件。它怀疑自从Heroku做了预编译后,即使active_admin.css文件没有被预编译,它也不会抛出错误。如何预编译active_admin.css?

顺便说一下,我正在运行rails 3.2。

编辑:

看来我的“修复”并不完整。如果我有require_tree。或require_directory。在我的application.css然后它的工作,但它搞砸了我的主要应用程序CSS,因为它们都被编译到application.css。如果我没有其中一个条目,那么它会中断。关于如何解决这个问题的任何想法?

6 个答案:

答案 0 :(得分:15)

我终于能够解决这个问题了。如果其他人遇到这个问题,我想我会记录下我解决它的步骤。

我在生产模式(RAILS_ENV=production rails s)本地运行我的应用程序,并且能够复制我在本地计算机上在Heroku上收到的错误。

我将active_admin.css.scss和active_admin.js复制到/ vendor / assets目录。由于y app一直告诉我它缺少active_admin / mixins,我还将资产中的整个active_admin目录复制到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等)。我没有看到的部分是需要在application.rb中更改Bundler.require:

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

到:

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

一旦我做了这些更改,我就可以将代码推送到Heroku并让它为我预编译资产。我希望这可以帮助别人节省一些时间来解决这个问题。

答案 1 :(得分:11)

你正走在正确的轨道上,让Heroku为你编译资产。这使事情变得最简单。

要在预编译器清单中包含其他文件,请在应用程序配置中使用类似的内容(config/application.rbconfig/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']

答案 2 :(得分:7)

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.scssactive_admin.js放在vendor/assets而不是app/assets。这可以防止在使用sprockets指令require_tree .时无意中包含AA资产这是application.css中新的rails应用程序的默认sprockets指令,这也是许多人对所有部件都需要AA资产感到困惑的原因他们的网站。将AA资产放在vendor/assets中会阻止此问题,但您也可以将其放在app/assets的子目录中,并避免使用require_tree指令(而选择require_directory

  3. 确保预编译时sass-rails可用。这需要确保在预编译期间需要资产组或在所有gem组中使sass-rails可用。通常从旧版本的Rails升级将没有正确的Bundler require语句,因此检查您是否未在Rails 3.1+上启动项目非常重要。如果你可以在你的机器上运行bundle exec rake assets:precompile RAILS_ENV=production而没有错误,并且配置了假的生产数据库,那么你就是好的。

  4. 按照their FAQ中有关使用资产管道进行部署的指示设置特定于heroku的配置:

    # config/application.rb - NOT production.rb
    config.assets.initialize_on_precompile = false
    

答案 3 :(得分:5)

有同样的问题。修复了将以下内容添加到production.rb以预编译其他资产:

config.assets.precompile += %w( active_admin.css active_admin.js)

答案 4 :(得分:2)

我没有保留文件列表,而是通过更改production.rb中的标记来解决问题:

config.assets.compile = true

答案 5 :(得分:0)

我发现我可以通过更新我的gemfile来解决这个问题 - 将'sass-rails'宝石移出:assets组并进入生产或一般部分。

显然这是一个问题,Heroku需要saas-rails gem或它会破坏某些东西,所以说:http://ygamretuta.me/2011/10/02/setting-up-active-admin-on-heroku-with-rails-3-1-and-cedar/