Meteor-Community-Packages/meteor-scss

Can't deploy Meteor 0.9.1.1 project to Heroku that uses fourseven:scss package

stuartha13 opened this issue · 8 comments

I am working on a project that deployed fine to Heroku when using Meteor 0.8.7 and the Meteorite version of this SCSS package. I updated Meteor to 0.9.0.1 and ever since I haven't been able to deploy to Heroku, but only if I include this package. Running the site locally works fine - it's only the Heroku deploy that breaks.

I've been able to replicate the issue by simply taking the leaderboard example, adding fourseven:scss, changing leaderboard.css and renaming it to leaderboard.scss, and deploying that to Heroku using this buildpack: https://github.com/djhi/heroku-buildpack-meteorite.git

This is the error message that I am getting:

Refreshing package metadata. This may take a moment.
   downloading fourseven:scss at version 0.9.5 ...  done

 /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/fibers/future.js:173
                      throw(ex);
                            ^
 Error: Couldn't parse stack frame: '    at requireBinding (/tmp/node-meteor-30QT/.meteor/packages/fourseven:scss/.0.9.5.1rnvlg0++os.linux.x86_64+web.browser+web.cordova/plugin.meteor-scss.os.linux.x86_64/npm/meteor-scss/node_modules/node-sass/sass.js:17:14)'
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/parse-stack.js:76:13
     at Array.forEach (native)
     at Function._.each._.forEach (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
     at Object.exports.parse (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/parse-stack.js:24:5)
     at Object.exception (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:346:28)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/bundler.js:1107:22
     at Array.forEach (native)
     at Function._.each._.forEach (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
     at _.extend.load (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/bundler.js:1058:7)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/unipackage.js:445:16
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:228:16
     at _.extend.withValue (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/fiber-helpers.js:112:14)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:225:32
     at _.extend.withValue (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/fiber-helpers.js:112:14)
     at Object.enterJob (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:223:21)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/unipackage.js:437:20
     at Function._.each._.forEach (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:87:22)
     at _.extend._ensurePluginsInitialized (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/unipackage.js:425:7)
     at _.extend.getSourceHandlers (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/unipackage.js:380:10)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/compiler.js:362:21
     at Array.forEach (native)
     at Function._.each._.forEach (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
     at compileUnibuild (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/compiler.js:361:5)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/compiler.js:879:27
     at Array.forEach (native)
     at Function._.each._.forEach (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
     at Object.compiler.compile (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/compiler.js:878:5)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/bundler.js:1756:26
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:186:11
     at _.extend.withValue (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/fiber-helpers.js:112:14)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:183:27
     at _.extend.withValue (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/fiber-helpers.js:112:14)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:181:16
     at _.extend.withValue (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/fiber-helpers.js:112:14)
     at Object.capture (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/buildmessage.js:172:21)
     at Object.exports.bundle (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/bundler.js:1678:31)
     at main.registerCommand.name [as func] (/tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/commands.js:513:30)
     at /tmp/node-meteor-30QT/.meteor/packages/meteor-tool/.1.0.26.1owm6lu++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/main.js:1212:23
tar: /app/tmp/cache/bundle.tar.gz: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
tar: Child returned status 2
tar: Exiting with failure status due to previous errors

 !     Push rejected, failed to compile Meteor app app

I just tried deploying with my app upgraded to meteor 0.9.3-rc5, which has a fix for the Couldn't parse stack frame issue. Here is the real error:

       While loading plugin `meteor-scss` from package `fourseven:scss`:
       module.js:356:32: /lib/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/node-meteor-L7qd/.meteor/packages/fourseven:scss/.0.9.5.1t7blqy++os.linux.x86_64+web.browser+web.cordova/plugin.meteor-scss.os.linux.x86_64/npm/meteor-scss/node_modules/node-sass/build/Release/obj.target/binding.node)
         at Module.load (module.js:356:32)
         at Function.Module._load (module.js:312:12)
         at Module.require (module.js:364:17)
         at require (module.js:380:17)
         at requireBinding (/tmp/node-meteor-L7qd/.meteor/packages/fourseven:scss/.0.9.5.1t7blqy++os.linux.x86_64+web.browser+web.cordova/plugin.meteor-scss.os.linux.x86_64/npm/meteor-scss/node_modules/node-sass/sass.js:17:14)
         at Object.<anonymous> (/tmp/node-meteor-L7qd/.meteor/packages/fourseven:scss/.0.9.5.1t7blqy++os.linux.x86_64+web.browser+web.cordova/plugin.meteor-scss.os.linux.x86_64/npm/meteor-scss/node_modules/node-sass/sass.js:24:15)
         at Module._compile (module.js:456:26)
         at Object.Module._extensions..js (module.js:474:10)
         at Module.load (module.js:356:32)
         at Function.Module._load (module.js:312:12)
         at Module.require (module.js:364:17)
         at require (module.js:380:17)
         at Object._.extend.Npm.require (/tmp/node-meteor-L7qd/.meteor/packages/meteor-tool/.1.0.31-rc5.pa3w93++os.linux.x86_64+web.browser+web.cordova/meteor-tool-os.linux.x86_64/tools/bundler.js:1093:22)
         at Package (<runJavaScript-55>:12:16)
         at <runJavaScript-55>:83:4
         at <runJavaScript-55>:90:3

Before upgrading to meteor 0.9, I was using version 0.9.3 of this package. I am now using version 0.9.5. This error seems to be coming from node-sass, but this package did not upgrade the version of node-sass being used between 0.9.3 and 0.9.5.

Ok, I managed to find where my copies of 0.9.3 and 0.9.5 are stored. I examined the binding.node files for node-sass in both versions with the readelf command. It looks like the file in 0.9.5 depends on the glibc 2.14 version of the memcpy function while the file in 0.9.3 does not.

A few years ago, a change was made to glibc's implementation of the memcpy function which broke some badly-written programs. In order to reduce some of the effects of this change, a new symbol version for memcpy was introduced. In the new version of glibc with the new implementation of memcpy, binaries referencing memcpy with the old symbol version would get the old version of memcpy which had the old behavior that everyone expected. Binaries referencing it with the new symbol version would get the new behavior. Only newly-compiled programs compiled against the new version of glibc would reference the new version of memcpy. Unfortunately this also means that these programs can't be run against older versions of glibc, even though they would probably work if the version requirement were lifted. Here are a few links:

https://bugzilla.redhat.com/show_bug.cgi?id=638477
https://sourceware.org/bugzilla/show_bug.cgi?id=12518
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=0354e355014b7bfda32622e0255399d859862fcd

However, I realize that you guys probably don't care about this ancient history, so I'll move on.

Heroku's "cedar" stack (https://devcenter.heroku.com/articles/cedar), which you are most likely running, uses Ubuntu 10.04. As you can see here: http://packages.ubuntu.com/lucid/libc6, that version of Ubuntu doesn't have a new enough libc version. However, all is not lost - that article on cedar describes an experimental "cedar-14" stack, which uses Ubuntu 14.04. As you can see here: http://packages.ubuntu.com/trusty/libc6, that version of Ubuntu has a more than new enough libc version. As this: https://devcenter.heroku.com/articles/stack#changing-stacks page describes, you can switch stacks like so:

heroku stack:set cedar-14

which will take effect at your next push. This seems to allow meteor-scss to run for me.

Unfortunately, I'm now having trouble with importing scss files from other packages, such as https://atmospherejs.com/matthew/foundation5-sass. The import seems to not work the first time meteor is run, and then works on subsequent runs. That's only a minor nuisance during development, but it becomes a show-stopper when you're using an automated build script which only attempts to build once. :(

To the maintainer: if you'd like to support people running this package on heroku's cedar stack or other older Linux distros, you'll unfortunately need to build it on a machine/vm with an older version of glibc.

@atrigent, awesome response! I changed to the cedar-14 stack, and now this package is working like a charm. Thank you 👍

I was using https://atmospherejs.com/reywood/bootstrap3-sass, but found that it was failing to compile on a fresh deploy (probably similar to the issue you are having with the foundation package). Instead I have included the bootstrap-sass files manually for now, and that's working for me.

I'm closing this issue as it was a Heroku problem, not the author's problem.

@atrigent thanks 👍