2013-08-23 7 views
10

Ich bin mit Rails 3.2.14 ohne Frage ...JSON Fehler mit Coffee & Rails Asset-Pipeline

Ich habe vor kurzem application.js-application.js.coffee umbenannt und sind jetzt einen JSON-Fehler.

JSON::GeneratorError 

only generation of JSON objects or arrays allowed 
    (in /.../app/assets/javascripts/application.js.coffee) 

Selbst wenn ich alle Inhalte von application.js.coffee lösche ich immer noch den Fehler.

Wenn ich versuche, es direkt zu sehen (http://localhost:3000/assets/application.js), ist es das gleiche Problem:

throw Error("JSON::GeneratorError: only generation of JSON objects or arrays allowed\n (in /.../app/assets/javascripts/application.js.coffee)") 

Ich habe meine App für alle möglichen Probleme gekämmt, aber alles sieht ziemlich Standard.

+0

Hat application.js.coffee auch Referenzen auf andere JS? – techvineet

Antwort

6

Ich hatte ein ähnliches Problem (Rails 4 asset pipeline throws "only generation of JSON objects or arrays allowed"), die nichts mit application.js zu tun hatte. Der Juwel multi_json wurde von 1.7.8 auf 1.7.9 aktualisiert und hat meine App kaputt gemacht. Jede Änderung an den Cofeescript-Dateien führte zu dem Fehler "nur die Generierung von JSON-Objekten oder -Arrays erlaubt".

Ich habe das Juwel multi_json explizit in meine Gemfile eingefügt, behoben auf Version 1.7.8. In löste das Problem für mich.

+1

Es scheint auch etwas mit Pow zu tun zu sein. Als ich den Server mit WebBrick und Thin gestartet habe, funktionierte beides einwandfrei. Aber mit multi_json schien es auch mit Pow zu arbeiten. Vielen Dank! – brewster

+1

@brewster verwenden Sie execjs Juwel? Wenn Sie verwenden, müssen Sie Ruby> = 2.0.0 verwenden, um korrekt zu funktionieren. – seixasfelipe

+0

exec_js 2.0.1 sollte das Problem beheben. –

5

Ich habe das Sicherungsproblem nicht in einem Rails-Projekt, sondern ein Ruby-Projekt mit Ritzeln. Ich habe das Problem nicht endgültig festgestellt, aber es scheint mit den execjs und der Javascript-Laufzeit verwandt zu sein.

können Sie versuchen,

gem 'therubyracer'

zu Ihrem Gemfile hinzuzufügen. Dies installiert die v8-Engine, die das Problem für mich gelöst hat.

+0

Dies löste es für mich auf Ubuntu 13.04, nvm, Knoten 0.10.12. Execjs hat diese Node-Installation bereits verwendet, bevor ich "therubyracer" hinzugefügt habe. (Der multi_json Vorschlag in der anderen Antwort hat nicht funktioniert.) Welches OS/Node hast du? –

+0

Ich habe versucht, execjs auf eine frühere Version downgraded dank [diesem Blog] (http://www.seanbehan.com/json-generatorerror-only-generation-of-json-objects-o-arrays-allowed). Das scheint es für jetzt behoben zu haben. –