我正在使用Capistrano在部署期间预编译我的资产,我收到的错误对我来说并不是很有用。
* executing "cd -- path/to/releases/20130507161214 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
*** rake aborted!
*** wrong argument type nil (expected Data)
*** (in /path/to/app/assets/javascripts/application.js)
*** /path/to/gems/therubyracer-0.11.4/lib/v8/context.rb:67: in 'New'
以下是我提到的application.js
:
//= require jquery
//= require jquery_ujs
//= require bootstrap
更新
所以我尝试完全删除application.js
并再次运行它,但后来它抱怨了我的另一个js
文件(但是同样没有帮助的错误)。然后我删除了所有js
个文件,并开始抱怨我的css
个文件。
如果删除了所有js和css文件,则预编译会成功(但显然没有我需要的js和css文件)。
我对所有非图片资源使用.js.coffee
和.css.scss
。
更新
@TomDavies的回答确实对我有所帮助,但仍然有问题。在部署期间,它只是在预编译失败而没有给我信息。所以我做了Tom提到的,我在我的开发机器上预编译,但是在生产环境中,并注意到我也遇到了问题。它给我的错误是“Unexpected INDENT”,但它不会告诉我一个行号,只是一个文件名......
我最终发现我的ajax请求中缺少逗号。显然它在开发环境中没有它就可以工作,只是没有它就不能预编译......
这就是我所拥有的:
$.ajax 'some/url'
success:
alert 'yay!'
这就是我需要的:
$.ajax 'some/url',
success:
alert 'yay!'
注意顶行末尾的逗号...现在预编译很好的开发。我确信在开发计算机(但生产环境)上预编译期间修复错误会解决部署问题,但无济于事。它仍然在顶部wrong argument type nil (expected Data)
出现相同的错误。
我能够在我的开发机器上运行rake assets:precompile RAILS_ENV=production
,在生产机器上不起作用,在顶部给出错误。不知道如何调试这个。
答案 0 :(得分:1)
如果要从中导入其他scss,则应将文件称为application.scss。
我不确定您是否确切错误,但对于资产管道问题,您应该始终尝试在开发中本地编译它们。这种错误通常更加明显,您可以更轻松地尝试/错误。以下是我通常在config / environments / development.rb中保留的一些步骤,以使资产预编译在本地工作:
# NOTE: To test asset pipeline in dev uncomment the following configs and run:
#
# $ RAILS_ENV=development rake assets:precompile
#
# It is recommended you rm -rf public/assets when you are finished or this may affect
# your local dev environment
#
# config.assets.compress = true
# config.assets.compile = false
# config.assets.digest = true
这是一个相同的要点:
答案 1 :(得分:1)
这看起来像一个可能的gem问题,因为它在application.js文件上失败并且你的内容看起来是正确的。您使用的是哪个版本的Ruby?如果您已切换不同的版本,则可能需要清除gems目录并从头开始重新安装。我遇到过在一个Ruby版本下安装gems的问题,留下了饲料,导致在另一个版本下发生奇怪的事情。
答案 2 :(得分:0)
我还希望使用Node.js作为ExecJS运行时。 TheRubyRacer和内存管理(https://github.com/cowboyd/therubyracer/issues/350)有几个记录的问题,似乎该项目已被放弃(https://github.com/cowboyd/therubyracer/pull/348)。
假设您安装了最新的Node.js,您可以在预编译任务之前添加/附加EXECJS_RUNTIME="Node"
:
rake assets:precompile RAILS_ENV=production EXECJS_RUNTIME="Node"
作为奖励,这加快了资产编制的数量级。