oortcloud / heroku-buildpack-meteorite

MIT License
189 stars 97 forks source link

Include PhantomJS for native Spiderable support #36

Open llama opened 10 years ago

paralin commented 10 years ago

Can't you just add the meteor package for this? Why force it in the buildpack?

Just meteor add spiderable

llama commented 10 years ago

Spiderable requires PhantomJS, which needs to be installed on top of the Cedar stack. I've tried to do it four ways without success:

1) Using the PhantomJS meteorite package. This results in a "permission denied" error when the meteor app tries to run PhantomJS, as well as if you meteor run bash and try to launch PJS.

2) Using the PhantomJS buildpack along with this one using buildpack-multi. This resulted in an awful error about 'require not found'

3) Using spiderable-remote with a remote PJS server. It's ugly and couldn't get it to work.

4) Using heroku-buildpack-meteorite-phantomjs, an old attempt at fixing this problem. Got an error about Fibers.

There are a number of SO questions about this problem. Spiderable is an important package. The best solution would be to include PhantomJS in this buildpack.

paralin commented 10 years ago

I'm quite surprised they don't let you launch a second process. Would you not have to build Phantom into the app?

llama commented 10 years ago

I'm not quite sure what you mean. I don't think there is an issue with Heroku not allowing a second process. The nicest solution (including meteorite PhantomJS package) results in a cryptic permissions error when anything attempts to run the binary.

paralin commented 10 years ago

Perhaps the binary isn't +x?

llama commented 10 years ago

Yep that's it. So I'm now setting the execute permissions bit automatically on server startup (after meteorite pulls down the phantomjs binary), but it's a hack.

Here's another stackoverflow discussion of this issue btw. Some people are just installing the binary within their meteor app folder, but thats another hack.

Discussing fixing the permissions problem in meteor-phantomjs.