rake assets:precompile出现undefined method `[]' for nil:NilClass错误

19

我正在尝试启动一个新的生产服务器,它已经非常接近了。当我执行

RAILS_ENV=production rake assets:precompile

返回此错误

undefined method `[]' for nil:NilClass

当我使用--trace运行它时,返回的结果如下

$RAILS_ENV=production rake assets:precompile --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
rake aborted!
undefined method `[]' for nil:NilClass
  (in /home/deploy/pm/app/assets/stylesheets/jquery-ui-1.8.16.custom.css.scss)

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

非常感谢提供帮助的任何人,包括想法等。

这是Gemfile和bundle清单:

source 'http://rubygems.org'

gem 'cancan'
gem 'client_side_validations'
gem 'devise', '~> 1.5.3'
gem 'execjs'
gem 'haml'
gem 'httparty'
gem 'jquery-rails'
gem 'mysql2'
gem 'paperclip', "~> 2.4"
gem 'rails', '3.1.0'
gem 'rails3-jquery-autocomplete'
gem 'rake', '0.9.2'
gem 'remotipart', "~> 1.0"
gem 'simple_datatables'
gem 'therubyracer'
gem 'validates_timeliness', '~> 3.0.2'
gem 'will_paginate', '~> 3.0'

gem 'geocoder', '~> 1.1.2'

#temp for pm.onlinetherapy.com
gem 'faker'

group :test do
    gem 'capybara'
    gem 'cucumber-rails', :require => false
    gem 'database_cleaner'
    gem 'factory_girl_rails'
    gem 'faker'
    gem 'guard-rspec'
    gem 'selenium-webdriver', '2.7.0'
    gem 'webrat'
end
group :development, :test do
    gem 'faker'
    gem 'haml-rails'
    gem 'hpricot'
    gem 'rspec-rails'
    gem 'ruby_parser'
    gem 'web-app-theme', '~> 0.8.0'
end


# Gems used only for assets and not required
# in production environments by default.
group :assets do
    gem 'sprockets'
    gem 'sass', '3.1.20'
    gem 'sass-rails', '3.1.4' # downgraded to 3.1.4 to avoid a stack overflow error in rake assets:precompile
    gem 'coffee-rails', "~> 3.1.0"
    gem 'uglifier'
end

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# bundle install has a problem installing linecache19, a dependency of ruby-debug19
# try 'sudo gem install linecache19' to fix the problem, and then do bundle install again 
gem 'ruby-debug19', :require => 'ruby-debug'

而且 bundle list 呈现出来的是:

Gems included by the bundle:
  * actionmailer (3.1.0)
  * actionpack (3.1.0)
  * activemodel (3.1.0)
  * activerecord (3.1.0)
  * activeresource (3.1.0)
  * activesupport (3.1.0)
  * archive-tar-minitar (0.5.2)
  * arel (2.2.3)
  * bcrypt-ruby (3.0.1)
  * builder (3.0.2)
  * bundler (1.2.0)
  * cancan (1.6.8)
  * capybara (1.1.2)
  * childprocess (0.3.5)
  * client_side_validations (3.1.4)
  * cocaine (0.3.0)
  * coffee-rails (3.1.1)
  * coffee-script (2.2.0)
  * coffee-script-source (1.3.3)
  * columnize (0.3.6)
  * cucumber (1.2.1)
  * cucumber-rails (1.3.0)
  * database_cleaner (0.8.0)
  * devise (1.5.3)
  * diff-lcs (1.1.3)
  * erubis (2.7.0)
  * execjs (1.4.0)
  * factory_girl (4.0.0)
  * factory_girl_rails (4.0.0)
  * faker (1.0.1)
  * ffi (1.1.5)
  * geocoder (1.1.3)
  * gherkin (2.11.2)
  * guard (1.3.2)
  * guard-rspec (1.2.1)
  * haml (3.1.7)
  * haml-rails (0.3.4)
  * hike (1.2.1)
  * hpricot (0.8.6)
  * httparty (0.8.3)
  * i18n (0.6.1)
  * jquery-rails (2.1.2)
  * json (1.7.5)
  * json_pure (1.7.5)
  * jsonify (0.3.1)
  * jsonify-rails (0.3.2)
  * libv8 (3.3.10.4)
  * linecache19 (0.5.12)
  * listen (0.5.0)
  * mail (2.3.3)
  * meta_search (1.1.3)
  * mime-types (1.19)
  * multi_json (1.3.6)
  * multi_xml (0.5.1)
  * mysql2 (0.3.11)
  * nokogiri (1.5.5)
  * orm_adapter (0.0.7)
  * paperclip (2.7.0)
  * polyamorous (0.5.0)
  * polyglot (0.3.3)
  * rack (1.3.6)
  * rack-cache (1.0.3)
  * rack-mount (0.8.3)
  * rack-ssl (1.3.2)
  * rack-test (0.6.1)
  * rails (3.1.0)
  * rails3-jquery-autocomplete (1.0.9)
  * railties (3.1.0)
  * rake (0.9.2)
  * rdoc (3.12)
  * remotipart (1.0.2)
  * rspec (2.11.0)
  * rspec-core (2.11.1)
  * rspec-expectations (2.11.3)
  * rspec-mocks (2.11.2)
  * rspec-rails (2.11.0)
  * ruby-debug-base19 (0.11.25)
  * ruby-debug19 (0.11.6)
  * ruby_core_source (0.1.5)
  * ruby_parser (2.3.1)
  * rubyzip (0.9.9)
  * sass (3.1.20)
  * sass-rails (3.1.4)
  * selenium-webdriver (2.7.0)
  * sexp_processor (3.2.0)
  * simple_datatables (0.2.1)
  * sprockets (2.0.4)
  * therubyracer (0.10.2)
  * thor (0.14.6)
  * tilt (1.3.3)
  * timeliness (0.3.6)
  * treetop (1.4.10)
  * tzinfo (0.3.33)
  * uglifier (1.3.0)
  * validates_timeliness (3.0.14)
  * warden (1.2.1)
  * web-app-theme (0.8.0)
  * webrat (0.7.3)
  * will_paginate (3.0.3)
  * xpath (0.1.4)

请提供堆栈的顶部。 - sumskyi
我包含了整个跟踪。那里面没有太多内容。我只是重新运行它以确保。可供参考的信息不多。 - Russ Petersen
7个回答

59
在我的情况下,这个错误是在我创建了一个文件 apps/assets/stylesheet/fonts.css 之后出现的。这个文件中有一个调用 font-url() 的语句。
@font-face {
  font-family: 'museo-slab';
  src: font-url('museo_slab_500-webfont.eot');
  src: font-url('museo_slab_500-webfont.eot?#iefix') format('embedded-opentype'), 
  font-url('museo_slab_500-webfont.ttf') format('truetype');
  font-weight: bold;
  font-style: normal;
}
当我将这个文件重命名为font.scss时,错误undefined method '[]' for nil:NilClass就消失了。

感谢你的提示Cristiam!在我的情况下,这是一个扩展名为.css.erb的文件。将其重命名为.css.scss,就不会再出现[] nil错误了。它本来就没有任何ERB。 - jwarchol
这帮助我解决了两天的调试问题!!!谢谢!!!我一直遇到各种神秘的错误,甚至有些编码错误,但无法接近问题的源头。<叹气>总之,我只是将一个文件从.css重命名为.scss,现在一切都好了!?!疯了 - Meltemi
运行得非常顺利。 - Xeeshan

14

我和Cristiam遇到了类似的问题。我正在使用Rails 4.0,在一个 .css 文件中调用了image-url()

#pullrefresh .icon.loading {
  background: image-url('spinner.png') no-repeat;
  width: 19px;
  height: 19px;
  background-size: 100%;
  bottom: 0;

  animation: rotate 1s linear infinite;
  -o-animation: rotate 1s linear infinite;
  -ms-animation: rotate 1s linear infinite;
  -moz-animation: rotate 1s linear infinite;
  -webkit-animation: rotate 1s linear infinite;
}

我只需要将文件改名为<filename>.scss,它也对我起作用了。


我曾经遇到过类似的问题。我的.scss文件是空的,一旦我将它们删除,一切都正常了。 - Hartwig

5

我使用Rails 4.2.8,我用以下方法解决了这个问题:

在整个项目中查找关键字:asset-url。

如果有任何css文件包含此关键字,请将其更改为scss。

提交->部署。它可以正常工作。


3

我认为这可能是在升级到Rails 3.2.16后出现的问题。我只需要更新sass-rails gem即可解决。

bundle update sass-rails

2
我遇到了同样的问题,我通过以下方法解决:
  • 将包含SCSS变量或类似@font-face的模式的.css文件重命名为.scss
  • 删除.css.map文件(如果有)
  • 删除由.css.map生成的文件
希望这能帮助您节省宝贵的时间,调试与样式表相关的资产预编译问题。

1
我知道这是一个旧的帖子,但它是我搜索的结果中排名最高的。
在Rails ~6.0上,使用Encrypted Secrets(Credentials)部署到Heroku,但这适用于任何您没有检入master.key文件的地方(应该是任何地方!)
在我的情况下,我决定使用环境变量来提供master.key,但我忘记设置变量RAILS_MASTER_KEY

嘿,你能解释一下你是怎么解决这个问题的吗?比如你采取了哪些步骤。我认为我的问题和你的类似。我在我的配置变量中设置了 RAILS MASTER KEY,但它仍然无法加载 rake 文件。 - MaxRah

0

我通过在我的分支上进行sed替换来到这里。虽然我排除了许多敏感文件夹,但我认为替换某些内容损坏了我的资产。删除它们并重新编译没有解决问题。尝试了这个帖子中的所有方法后,我最终不得不重新克隆分支并将我的.git文件夹复制到新文件夹中。因此,如果其他所有方法都失败了,请尝试重新克隆您的分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接