Issues deploying 1.13.4 to Heroku


#1

Hey guys,

I’ve been having trouble getting 1.13.4 to deploy to Heroku. Here’s the log output:

Pushing to git@heroku.com:---.git
Warning: Permanently added 'heroku.com,50.19.85.132' (RSA) to the list of known hosts.
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.2
remote: -----> Installing dependencies using 1.9.7
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

...snip...

remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: [SKYLIGHT] [0.7.0-beta.1] authentication token required; disabling Skylight agent
remote: [SKYLIGHT] [0.7.0-beta.1] You are running in the staging environment but haven't added it to config.skylight.environments, so no data will be sent to skylight.io.
remote: I, [2015-07-18T18:30:12.936933 #572] INFO -- : ** [Raven] Raven 0.14.0 ready to catch errors
remote: ** [Raven] Raven 0.14.0 ready to catch errors
remote: ** [Raven] Sending event d43f514ff694a29b6e90876cdbaef46d to Sentry
remote: ** [Raven] Raven HTTP Transport connecting to https://app.getsentry.com
remote: rake aborted!
remote: Oj::ParseError: unexpected character at line 1, column 1 [parse.c:659]
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:68:in `parse'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:68:in `extract_result'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:39:in `exec'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:21:in `eval'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:46:in `call'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/barber-0.9.1/lib/barber/precompiler.rb:23:in `compile'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/barber-0.9.1/lib/barber/precompiler.rb:8:in `compile'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/ember-handlebars-template-0.3.0/lib/ember/handlebars/helper.rb:63:in `precompile_ember_handlebars'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/ember-handlebars-template-0.3.0/lib/ember/handlebars/templates/sprockets+tilt.rb:44:in `evaluate'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/tilt-1.4.1/lib/tilt/template.rb:103:in `render'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/legacy_tilt_processor.rb:25:in `call'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:75:in `call_processor'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `reverse_each'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `call_processors'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:86:in `load_asset_by_uri'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:45:in `block in load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:155:in `fetch_asset_from_dependency_cache'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:38:in `load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:20:in `block in initialize'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `yield'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/bundle.rb:23:in `block in call'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/utils.rb:183:in `dfs'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/bundle.rb:24:in `call'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:75:in `call_processor'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `reverse_each'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `call_processors'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:86:in `load_asset_by_uri'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:45:in `block in load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:155:in `fetch_asset_from_dependency_cache'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:38:in `load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:20:in `block in initialize'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `yield'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `load'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/base.rb:63:in `find_asset'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/base.rb:70:in `find_all_linked_assets'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:130:in `block in find'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:129:in `each'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:129:in `find'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:162:in `compile'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-rails-2.3.2/lib/sprockets/rails/task.rb:70:in `block (3 levels) in define'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/rake/sprocketstask.rb:147:in `with_logger'
remote: /tmp/build_a2c1ce002571b50f0aef26292f555964/vendor/bundle/ruby/2.2.0/gems/sprockets-rails-2.3.2/lib/sprockets/rails/task.rb:69:in `block (2 levels) in define'
remote: Tasks: TOP => assets:precompile
remote: (See full trace by running task with --trace)
remote: !
remote: ! Precompiling assets failed.
remote: !
remote:
remote: ! Push rejected, failed to compile Ruby app
remote:
remote: Verifying deploy....
remote:
remote: !	Push rejected to ---.
remote:
To git@heroku.com:---.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:---.git'

Relevant Ember versions:

DEBUG: -------------------------------
DEBUG: Ember                    : 1.13.4+cc99723b
DEBUG: Ember Data               : 1.0.0-beta.19
DEBUG: jQuery                   : 2.1.3
DEBUG: Ember Simple Auth        : 0.8.0
DEBUG: Ember Simple Auth Devise : 0.8.0
DEBUG: -------------------------------

Gems:

ember-source-1.13.4.1
ember-data-source-1.13.5
ember-handlebars-template-0.3.0
ember-rails-0.19.0
oj-2.12.10

Everything works normally on 1.12, and 1.13 precompiles locally, so I think this is a problem with the build environment being different on Heroku vs. my local. I believe Heroku is using Node.js and locally I’m probably using therubyracer. Not sure why that would cause Heroku to crap out while precompiling…

Anyway, I should be able to track this down post-haste, but if anyone’s got any shortcuts, I’m all ears. Also, figured I’d post in case anyone else is having the same issue. I’ll be sure to follow up with my findings.


#2

Yup, here’s my runtime locally:

#<ExecJS::ExternalRuntime:0x007f8e969bb528 @name="JavaScriptCore", @command="/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", @runner_path="/Users/golden-gai/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/execjs-2.5.2/lib/execjs/support/jsc_runner.js", @encoding=nil, @deprecated=false, @binary="/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc", @popen_options={:internal_encoding=>#<Encoding:UTF-8>}>

And here’s the runtime on Heroku:

#<ExecJS::ExternalRuntime:0x007fb5caf66c38 @name="Node.js (V8)", @command=["nodejs", "node"], @runner_path="/app/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/support/node_runner.js", @encoding="UTF-8", @deprecated=false, @binary="node", @popen_options={:external_encoding=>"UTF-8", :internal_encoding=>#<Encoding:UTF-8>}>

#3

Furthermore, it looks like the node version is v0.10.30, which is pretty old. Let’s see if I can’t find a way to bring it up to date…


#4

So I tried using multiple buildpacks to install a more recent version of node (and forked the Ruby buildpack to explicitly stop it from installing the old version of node) and still no dice. Oj was obfuscating the actual error, so I removed it and here’s the error I’m getting now:

Pushing to git@heroku.com:---.git
Warning: Permanently added 'heroku.com,50.19.85.156' (RSA) to the list of known hosts.
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching custom git buildpack... done
remote: -----> Multipack app detected
remote: =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-nodejs.git
remote: =====> Detected Framework: Node.js
remote:
remote: -----> Creating runtime environment
remote:
remote: NPM_CONFIG_LOGLEVEL=error
remote: NPM_CONFIG_PRODUCTION=true
remote: NODE_MODULES_CACHE=true
remote:
remote: -----> Installing binaries
remote: engines.node (package.json): ~0.12.7
remote: engines.npm (package.json): ~2.12.1
remote:
remote: Resolving node version ~0.12.7 via semver.io...
remote: Downloading and installing node 0.12.7...
remote: Resolving npm version ~2.12.1 via semver.io...
remote: Downloading and installing npm 2.12.1 (replacing version 2.11.3)...
remote:
remote: -----> Restoring cache
remote: Loading 1 from cacheDirectories (default):
remote: - node_modules (not cached - skipping)
remote:
remote: -----> Building dependencies
remote: Pruning any extraneous modules
remote: Installing node modules (package.json)
remote:
remote: -----> Caching build
remote: Clearing previous node cache
remote: Saving 1 cacheDirectories (default):
remote: - node_modules (nothing to cache)
remote:
remote: -----> Build succeeded!
remote: └── (empty)
remote:
remote: =====> Downloading Buildpack: https://github.com/matthooks/heroku-buildpack-ruby.git
remote: =====> Detected Framework: Ruby
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.2.2
remote: -----> Installing dependencies using 1.9.7
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment

...snip

remote: Removing oj (2.12.10)
remote: Removing oj_mimic_json (1.0.1)
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: [SKYLIGHT] [0.7.0-beta.1] authentication token required; disabling Skylight agent
remote: [SKYLIGHT] [0.7.0-beta.1] You are running in the staging environment but haven't added it to config.skylight.environments, so no data will be sent to skylight.io.
remote: I, [2015-07-19T08:29:49.051849 #615] INFO -- : ** [Raven] Raven 0.14.0 ready to catch errors
remote: ** [Raven] Raven 0.14.0 ready to catch errors
remote: ** [Raven] Sending event 24fa1b6dd6cdfe18170ed847d1971527 to Sentry
remote: ** [Raven] Raven HTTP Transport connecting to https://app.getsentry.com
remote: rake aborted!
remote: JSON::ParserError: 757: unexpected token at 'DEPRECATION: Using `{{view}}` or any path based on it (L18:C12) has been deprecated. [deprecation id: view.keyword.view] See http://emberjs.com/deprecations/v1.x#toc_view-and-controller-template-keywords for more details.
remote: at deprecatePath (/tmp/execjs20150719-615-1ax4ss9js:11287:32)
remote: at /tmp/execjs20150719-615-1ax4ss9js:11255:7
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17992:7)
remote: at visitors.ElementNode (/tmp/execjs20150719-615-1ax4ss9js:18008:16)
remote: at Walker.children (/tmp/execjs20150719-615-1ax4ss9js:18025:7)
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17993:12)
remote: at visitors.ElementNode (/tmp/execjs20150719-615-1ax4ss9js:18008:16)
remote: at Walker.children (/tmp/execjs20150719-615-1ax4ss9js:18025:7)
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17993:12)
remote: DEPRECATION: Using `{{view "select"}}` is deprecated. (L18:C12) [deprecation id: view.helper.select] See http://emberjs.com/deprecations/v1.x#toc_ember-select for more details.
remote: at deprecateSelect (/tmp/execjs20150719-615-1ax4ss9js:11351:32)
remote: at deprecateHelper (/tmp/execjs20150719-615-1ax4ss9js:11344:7)
remote: at /tmp/execjs20150719-615-1ax4ss9js:11332:7
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17992:7)
remote: at visitors.ElementNode (/tmp/execjs20150719-615-1ax4ss9js:18008:16)
remote: at Walker.children (/tmp/execjs20150719-615-1ax4ss9js:18025:7)
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17993:12)
remote: at visitors.ElementNode (/tmp/execjs20150719-615-1ax4ss9js:18008:16)
remote: at Walker.children (/tmp/execjs20150719-615-1ax4ss9js:18025:7)
remote: at Walker.visit (/tmp/execjs20150719-615-1ax4ss9js:17993:12)
remote: ["ok","(function() {\n var child0 = (function() {\n return {\n meta: {\n \"revision\": \"Ember@1.13.4+cc99723b\",\n \"loc\": {\n \"source\": null,\n \"start\": {\n \"line\": 30,\n \"column\": 4\n },\n \"end\": {\n \"line\": 50,\n \"column\": 4\n }\n }\n },\n arity: 0,\n cachedFragment: null,\n hasRendered: false,\n buildFragment: function buildFragment(dom) {\n var el0 = dom.createDocumentFragment();\n var el1 = dom.createTextNode(\" \");\n dom.appendChild(el0, el1);\n var el1 = dom.createElement(\"label\");\n dom.setAttribute(el1,\"class\",\"label\");\n dom.setAttribute(el1,\"for\",\"note\");\n var el2 = dom.createTextNode(\"Note\");\n dom.appendChild(el1, el2);\n dom.appendChild(el0, el1);\n var el1 = dom.createComment(\"\\n\\n \");\n dom.appendChild(el0, el1);\n var el1 = dom.createElement(\"div\");\n dom.setAttribute(el1,\"class\",\"input\");\n var el2 = dom.createTextNode(\"\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createComment(\"\");\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n \");\n dom.appendChild(el1, el2);\n dom.appendChild(el0, el1);\n var el1 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el0, el1);\n var el1 = dom.createComment(\"\");\n dom.appendChild(el0, el1);\n var el1 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el0, el1);\n var el1 = dom.createElement(\"div\");\n dom.setAttribute(el1,\"class\",\"hints\");\n var el2 = dom.createTextNode(\"\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createElement(\"div\");\n dom.setAttribute(el2,\"class\",\"hints__item\");\n var el3 = dom.createTextNode(\"\\n (optional) Private note for your box office staff\\n \");\n dom.appendChild(el2, el3);\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n \");\n dom.appendChild(el1, el2);\n dom.appendChild(el0, el1);\n var el1 = dom.createTextNode(\"\\n\");\n dom.appendChild(el0, el1);\n return el0;\n },\n buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n var morphs = new Array(2);\n morphs[0] = dom.createMorphAt(dom.childAt(fragment, [3]),1,1);\n morphs[1] = dom.createMorphAt(fragment,5,5,contextualElement);\n return morphs;\n },\n statements: [\n [\"inline\",\"dime-input\",[],[\"value\",[\"subexpr\",\"@mut\",[[\"get\",\"model.note\",[\"loc\",[null,[35,16],[35,26]]]]],[],[]],\"key\",\"note\",\"id\",\"note\",\"tabindex\",1,\"placeholder\",\"Wheelchair access, Chicago Sun Times, etc.\",\"clearError\",\"clearError\"],[\"loc\",[null,[34,8],[40,35]]]],\n [\"inline\",\"field-errors\",[],[\"errors\",[\"subexpr\",\"@mut\",[[\"get\",\"errors.note\",[\"loc\",[null,[43,28],[43,39]]]]],[],[]],\"text\",\"Note\"],[\"loc\",[null,[43,6],[43,53]]]]\n ],\n locals: [],\n templates: []\n };\n }());\n return {\n meta: {\n \"revision\": \"Ember@1.13.4+cc99723b\",\n \"loc\": {\n \"source\": null,\n \"start\": {\n \"line\": 1,\n \"column\": 0\n },\n \"end\": {\n \"line\": 64,\n \"column\": 0\n }\n }\n },\n arity: 0,\n cachedFragment: null,\n hasRendered: false,\n buildFragment: function buildFragment(dom) {\n var el0 = dom.createDocumentFragment();\n var el1 = dom.createElement(\"form\");\n dom.setAttribute(el1,\"class\",\"form form--inline\");\n var el2 = dom.createTextNode(\"\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createComment(\"\");\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createElement(\"div\");\n dom.setAttribute(el2,\"class\",\"fieldset\");\n var el3 = dom.createTextNode(\"\\n \");\n dom.appendChild(el2, el3);\n var el3 = dom.createElement(\"table\");\n dom.setAttribute(el3,\"class\",\"prices\");\n var el4 = dom.createTextNode(\"\\n \");\n dom.appendChild(el3, el4);\n var el4 = dom.createElement(\"tfoot\");\n var el5 = dom.createTextNode(\"\\n \");\n dom.appendChild(el4, el5);\n var el5 = dom.createElement(\"tr\");\n dom.setAttribute(el5,\"class\",\"row row--footer\");\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--label\");\n var el7 = dom.createTextNode(\" \");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--price cell--weak\");\n var el7 = dom.createTextNode(\"Total:\");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--total\");\n var el7 = dom.createTextNode(\"$0\");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n dom.appendChild(el4, el5);\n var el5 = dom.createTextNode(\"\\n \");\n dom.appendChild(el4, el5);\n dom.appendChild(el3, el4);\n var el4 = dom.createTextNode(\"\\n \");\n dom.appendChild(el3, el4);\n var el4 = dom.createElement(\"tbody\");\n var el5 = dom.createTextNode(\"\\n \");\n dom.appendChild(el4, el5);\n var el5 = dom.createElement(\"tr\");\n dom.setAttribute(el5,\"class\",\"row\");\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--label\");\n var el7 = dom.createTextNode(\"Complimentary\");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--price\");\n var el7 = dom.createTextNode(\"$0\");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n var el6 = dom.createElement(\"td\");\n dom.setAttribute(el6,\"class\",\"cell cell--quantity\");\n var el7 = dom.createTextNode(\"\\n \");\n dom.appendChild(el6, el7);\n var el7 = dom.createComment(\"\");\n dom.appendChild(el6, el7);\n var el7 = dom.createTextNode(\"\\n \");\n dom.appendChild(el6, el7);\n dom.appendChild(el5, el6);\n var el6 = dom.createTextNode(\"\\n \");\n dom.appendChild(el5, el6);\n dom.appendChild(el4, el5);\n var el5 = dom.createTextNode(\"\\n \");\n dom.appendChild(el4, el5);\n dom.appendChild(el3, el4);\n var el4 = dom.createTextNode(\"\\n \");\n dom.appendChild(el3, el4);\n dom.appendChild(el2, el3);\n var el3 = dom.createTextNode(\"\\n \");\n dom.appendChild(el2, el3);\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createComment(\"\");\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createElement(\"div\");\n dom.setAttribute(el2,\"class\",\"fieldset\");\n var el3 = dom.createTextNode(\"\\n\");\n dom.appendChild(el2, el3);\n var el3 = dom.createComment(\"\");\n dom.appendChild(el2, el3);\n var el3 = dom.createTextNode(\" \");\n dom.appendChild(el2, el3);\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n\\n \");\n dom.appendChild(el1, el2);\n var el2 = dom.createElement(\"div\");\n dom.setAttribute(el2,\"class\",\"actions\");\n var el3 = dom.createTextNode(\"\\n \");\n dom.appendChild(el2, el3);\n var el3 = dom.createComment(\"\");\n dom.appendChild(el2, el3);\n var el3 = dom.createTextNode(\"\\n \");\n dom.appendChild(el2, el3);\n var el3 = dom.createComment(\"\");\n dom.appendChild(el2, el3);\n var el3 = dom.createTextNode(\"\\n \");\n dom.appendChild(el2, el3);\n dom.appendChild(el1, el2);\n var el2 = dom.createTextNode(\"\\n\");\n dom.appendChild(el1, el2);\n dom.appendChild(el0, el1);\n var el1 = dom.createTextNode(\"\\n\");\n dom.appendChild(el0, el1);\n return el0;\n },\n buildRenderNodes: function buildRenderNodes(dom, fragment, contextualElement) {\n var element0 = dom.childAt(fragment, [0]);\n var element1 = dom.childAt(element0, [9]);\n var morphs = new Array(7);\n morphs[0] = dom.createElementMorph(element0);\n morphs[1] = dom.createMorphAt(element0,1,1);\n morphs[2] = dom.createMorphAt(dom.childAt(element0, [3, 1, 3, 1, 5]),1,1);\n morphs[3] = dom.createMorphAt(element0,5,5);\n morphs[4] = dom.createMorphAt(dom.childAt(element0, [7]),1,1);\n morphs[5] = dom.createMorphAt(element1,1,1);\n morphs[6] = dom.createMorphAt(element1,3,3);\n return morphs;\n },\n statements: [\n [\"element\",\"action\",[\"save\"],[\"on\",\"submit\"],[\"loc\",[null,[1,32],[1,61]]]],\n [\"inline\",\"form-errors\",[],[\"errors\",[\"subexpr\",\"@mut\",[[\"get\",\"errors.base\",[\"loc\",[null,[2,23],[2,34]]]]],[],[]]],[\"loc\",[null,[2,2],[2,36]]]],\n [\"inline\",\"view\",[\"select\"],[\"value\",[\"subexpr\",\"@mut\",[[\"get\",\"model.quantity\",[\"loc\",[null,[18,34],[18,48]]]]],[],[]],\"content\",[\"subexpr\",\"@mut\",[[\"get\",\"quantityOptions\",[\"loc\",[null,[18,57],[18,72]]]]],[],[]],\"tabindex\",1],[\"loc\",[null,[18,12],[18,85]]]],\n [\"inline\",\"name-email-fieldset\",[],[\"model\",[\"subexpr\",\"@mut\",[[\"get\",\"model\",[\"loc\",[null,[26,10],[26,15]]]]],[],[]],\"errors\",[\"subexpr\",\"@mut\",[[\"get\",\"errors\",[\"loc\",[null,[27,11],[27,17]]]]],[],[]]],[\"loc\",[null,[25,2],[27,19]]]],\n [\"block\",\"form-field\",[],[\"errors\",[\"subexpr\",\"@mut\",[[\"get\",\"errors.note\",[\"loc\",[null,[30,25],[30,36]]]]],[],[]],\"classNames\",\"field--inline\"],0,null,[\"loc\",[null,[30,4],[50,19]]]],\n [\"inline\",\"primary-button\",[],[\"buttonText\",\"Add comp\",\"loading\",[\"subexpr\",\"@mut\",[[\"get\",\"loading\",[\"loc\",[null,[56,14],[56,21]]]]],[],[]],\"tabindex\",2],[\"loc\",[null,[54,4],[57,18]]]],\n [\"inline\",\"cancel-button\",[],[\"loading\",[\"subexpr\",\"@mut\",[[\"get\",\"loading\",[\"loc\",[null,[59,14],[59,21]]]]],[],[]],\"tabindex\",2,\"action\",\"cancel\"],[\"loc\",[null,[58,4],[61,23]]]]\n ],\n locals: [],\n templates: [child0]\n };\n}())"]'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/json-1.8.3/lib/json/common.rb:155:in `parse'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/json-1.8.3/lib/json/common.rb:155:in `parse'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:68:in `extract_result'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:39:in `exec'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:21:in `eval'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/execjs-2.5.2/lib/execjs/external_runtime.rb:46:in `call'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/barber-0.9.1/lib/barber/precompiler.rb:23:in `compile'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/barber-0.9.1/lib/barber/precompiler.rb:8:in `compile'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/ember-handlebars-template-0.3.0/lib/ember/handlebars/helper.rb:63:in `precompile_ember_handlebars'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/ember-handlebars-template-0.3.0/lib/ember/handlebars/templates/sprockets+tilt.rb:44:in `evaluate'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/tilt-1.4.1/lib/tilt/template.rb:103:in `render'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/legacy_tilt_processor.rb:25:in `call'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:75:in `call_processor'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `reverse_each'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `call_processors'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:86:in `load_asset_by_uri'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:45:in `block in load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:155:in `fetch_asset_from_dependency_cache'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:38:in `load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:20:in `block in initialize'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `yield'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/bundle.rb:23:in `block in call'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/utils.rb:183:in `dfs'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/bundle.rb:24:in `call'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:75:in `call_processor'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `reverse_each'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/processor_utils.rb:56:in `call_processors'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:86:in `load_asset_by_uri'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:45:in `block in load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:155:in `fetch_asset_from_dependency_cache'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/loader.rb:38:in `load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:20:in `block in initialize'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `yield'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/cached_environment.rb:47:in `load'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/base.rb:63:in `find_asset'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/base.rb:70:in `find_all_linked_assets'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:130:in `block in find'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:129:in `each'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:129:in `find'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/sprockets/manifest.rb:162:in `compile'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-rails-2.3.2/lib/sprockets/rails/task.rb:70:in `block (3 levels) in define'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-3.2.0/lib/rake/sprocketstask.rb:147:in `with_logger'
remote: /tmp/build_b9894eea8b5ea3d1bb537bffcf6c3f3b/vendor/bundle/ruby/2.2.0/gems/sprockets-rails-2.3.2/lib/sprockets/rails/task.rb:69:in `block (2 levels) in define'
remote: Tasks: TOP => assets:precompile
remote: (See full trace by running task with --trace)
remote: !
remote: ! Precompiling assets failed.
remote: !
remote:
remote: ! Push rejected, failed to compile Multipack app
remote:
remote: Verifying deploy....
remote:
remote: !	Push rejected to ---.
remote:
To git@heroku.com:---.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:---.git'

Which points to this line in the ember source:

Which transpiles to:

_emberMetalCore["default"].deprecate("Using `{{" + (path && path.type === "PathExpression" && path.parts[0]) + "}}` or any path based on it " + _emberTemplateCompilerSystemCalculateLocationDisplay["default"](moduleName, node.loc) + "has been deprecated.", function deprecatePath_test() {

I’m not entirely sure why the ember-template-compiler file is being parsed by JSON… Anyone have any ideas?