Ruby on rails 3 activeadmin heroku样式表配置问题,部分修复
在本地预编译我的资产,然后将代码推送到Heroku后,我收到以下错误消息:Ruby on rails 3 activeadmin heroku样式表配置问题,部分修复,ruby-on-rails-3,heroku,activeadmin,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:
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
2012-03-28T17:06:01+00:00应用程序[web.1]:在2012-03-28 17:06:01+0000开始获取67.163.67.203的“/admin/login”
2012-03-28817:06:01+00:00应用程序[web.1]:
2012-03-28T17:06:01+00:00应用程序[web.1]:ActionView::Template::Error(要导入的文件找不到或不可读:active_admin/mixins。
2012-03-28817:06:01+00:00应用程序[网站1]:加载路径:
2012-03-28:17:06:01+00:00应用程序[web.1]:/app
2012-03-28817:06:01+00:00应用程序[web.1]:/app/vendor/bundle/ruby/1.9.1/gems/activeadmin-0.4.3/app/assets/stylesheets
2012-03-28817:06:01+00:00应用程序[web.1]:(在/app/vendor/assets/stylesheets/active_admin.css.scss中):
2012-03-28817:06:01+00:00应用程序[网站1]:7:
2012-03-28817:06:01+00:00应用程序[网站1]:6:
2012-03-28817:06:01+00:00应用程序[网站1]:8:
2012-03-28817:06:01+00:00应用程序[网站1]:9:
2012-03-28817:06:01+00:00应用程序[网站1]:10:
2012-03-28817:06:01+00:00应用程序[网站1]:11:
2012-03-28817:06:01+00:00应用程序[网站1]:12:
2012-03-28817:06:01+00:00应用程序[网站1]:供应商/资产/样式表/活动管理css.scss:2
我尝试了许多不同的选择,包括我在这里找到的以下技巧,以及GitHub页面上的其他技巧
这些选项都不起作用。最后,我收到一些建议,从git中删除我的public/assets目录,将代码推送到Heroku,让Heroku预编译这些资产。这种方法部分奏效。当我尝试转到网站的/admin页面时,我不再收到错误消息。但是,缺少活动的_admin CSS文件。它怀疑,由于Heroku进行了预编译,所以即使未预编译活动的_admin.css文件,它也没有抛出错误。如何预编译active_admin.css
顺便说一句,我正在运行rails 3.2
编辑:
看来我的“修复”还没有完成。如果我有一棵树。或需要_目录。在我的application.css中,它可以工作,但是它把我的主要应用程序css搞砸了,因为它们都被编译成application.css。如果我没有这些条目中的一个,那么它就会中断。有什么想法可以解决这个问题吗?让Heroku为您编译资产是正确的。这使事情变得简单 要在预编译器清单中包含其他文件,请在应用程序配置中使用类似的内容(无论是
config/application.rb
还是config/environments/production.rb
):
我终于解决了这个问题。如果其他人遇到这个问题,我想我会记录下我为解决这个问题所采取的步骤 我以生产模式在本地运行我的应用程序(
RAILS\u ENV=production RAILS s
),并且能够在本地机器上复制我在Heroku上收到的错误
我将我的active_admin.css.scss和active_admin.js复制到/vendor/assets目录。由于y app
不断告诉我它缺少active_admin/mixins,我还将assets中的整个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)))
致:
一旦我做了这些更改,我就可以将代码推送到Heroku上,让它为我预编译资产。我希望这能帮助某人节省一些时间来解决这个问题 也有同样的问题。通过将以下内容添加到production.rb以预编译其他资产来修复:
config.assets.precompile += %w( active_admin.css active_admin.js)
我发现我可以通过更新我的gemfile来解决这个问题——将“sass-rails”gem从:assets组移到production或general部分
显然,这是Heroku需要saas rails gem的问题,或者它破坏了某些东西,所以说:ActiveAdmin github wiki专门解决了这个问题: 以下是在撰写本文时所说的:
application.rb
中的预编译列表中(注意:您不能在production.rb
中添加它们,Heroku在预编译期间不会读取production.rb
)
active_admin.css.scss
和active_admin.js
放在vendor/assets
而不是app/assets
中。这可以防止在使用sprockets指令require\u tree时意外包含AA资产。
这是新rails应用程序的application.css
中的默认sprockets指令,这也是许多人对其站点的所有部分都需要AA资产感到困惑的原因。将AA资产放在vendor/assets
中可以防止此问题,但您也可以将其放在app/assets
的子目录中,避免使用require\u tree
指令(选择require\u目录
)sass-rails
可用。这需要确保在预编译期间需要资产组,或者使sass-rails
在所有gem组中可用。通常,从较旧版本的Rails升级不会有正确的Bundler require语句,因此检查您是否没有在Rails 3.1+上启动项目非常重要。如果您可以在您的机器上运行bundle exec rake assets:precompile RAILS_ENV=production
,并且配置了一个假的生产数据库,那么您就可以了Bundler.require(:default, :assets, Rails.env)
config.assets.precompile += %w( active_admin.css active_admin.js)
# config/application.rb
config.assets.precompile += %w( active_admin.css active_admin.js active_admin/print.css )
# config/application.rb - NOT production.rb
config.assets.initialize_on_precompile = false
config.assets.compile = true