Issue when trying to run Node from Foreman on Lion - `exec': Permission denied error
Question
I've followed the guide on Heroku's website to get a node server running using foreman:
http://devcenter.heroku.com/articles/node-js
I can successfully start up the node server if I load it directly, but as soon as I use Foreman in the Procfile, it errors with the following...
My-MacBook-Air:myDirectory digiguru$ foreman start
13:25:26 web.1 | started with pid 29046
13:25:26 web.1 | /usr/local/foreman/lib/foreman/process.rb:38:in `exec': Permission denied - /usr/local/foreman/bin/runner (Errno::EACCES)
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:38:in `fork_with_io'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:32:in `fork'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:32:in `fork_with_io'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:44:in `run_process'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:19:in `run'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:64:in `with_environment'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:18:in `run'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:17:in `chdir'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/process.rb:17:in `run'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/procfile_entry.rb:17:in `spawn'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/procfile_entry.rb:15:in `map'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/procfile_entry.rb:15:in `spawn'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/engine.rb:63:in `spawn_processes'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/engine.rb:61:in `each'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/engine.rb:61:in `spawn_processes'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/engine.rb:45:in `start'
13:25:26 web.1 | from /usr/local/foreman/lib/foreman/cli.rb:28:in `start'
13:25:26 web.1 | from /usr/local/foreman/vendor/gems/thor-0.14.6/lib/thor/task.rb:22:in `send'
13:25:26 web.1 | from /usr/local/foreman/vendor/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
13:25:26 web.1 | from /usr/local/foreman/vendor/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
13:25:26 web.1 | from /usr/local/foreman/vendor/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
13:25:26 web.1 | from /usr/local/foreman/vendor/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
13:25:26 web.1 | from /usr/bin/foreman:15
13:25:26 web.1 | process terminated
13:25:26 system | sending SIGTERM to all processes
Is there anything I can do to give Forman permission? I've tried sudo foreman start
, but to no avail.
I am running in ruby version 1.9.3 (upgraded from version 1.8.7 installed on lion by default).
UPDATE
Running sudo foreman start
after @user658619
installing heruko and foreman from ruby gems, we get...
/Users/digiguru/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find foreman (>= 0) amongst [bigdecimal-1.1.0, io-console-0.3, json-1.5.4, minitest-2.5.1, rake-0.9.2.2, rdoc-3.9.4] (Gem::LoadError)
from /Users/digiguru/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /Users/digiguru/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/site_ruby/1.9.1/rubygems.rb:1208:in `gem'
from /Users/digiguru/.rvm/gems/ruby-1.9.3-p0/bin/foreman:18:in `<main>'
My environment...
RubyGems Environment:
- RUBYGEMS VERSION: 1.8.15
- RUBY VERSION: 1.9.3 (2011-10-30 patchlevel 0) [x86_64-darwin11.2.0]
- INSTALLATION DIRECTORY: /Users/digiguru/.rvm/gems/ruby-1.9.3-p0
- RUBY EXECUTABLE: /Users/digiguru/.rvm/rubies/ruby-1.9.3-p0/bin/ruby
- EXECUTABLE DIRECTORY: /Users/digiguru/.rvm/gems/ruby-1.9.3-p0/bin
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-darwin-11
- GEM PATHS:
- /Users/digiguru/.rvm/gems/ruby-1.9.3-p0
- /Users/digiguru/.rvm/gems/ruby-1.9.3-p0@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :benchmark => false
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- http://rubygems.org/
Solution 2
Basically to get it working I had unfortunatley mucked up my installations by having a mix of rubies and gems some of which required SUDO, some that didn't.
Fortunately the good people of the internet have solved this problem for you with a tool called RVM
RVM lets you deploy each project with its own completely self-contained and dedicated environment--from the specific version of ruby, all the way down to the precise set of required gems to run your application. Having a precise set of gems also avoids the issue of version conflicts between projects, which can cause difficult-to-trace errors and hours of hair loss.
First download RVM
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
You'll want to open a new terminal window after doing this.
Clean up. If you have weirdly installed gems you'll want to remove them. Go to your root directory and sudo get rid of them. You can see all of them with the gem list
command
cd
sudo gem list
sudo gem uninstall foreman heroku
Install a ruby. You should do this in the subdirectory of your application. I chose 1.9.3
cd myApp
rvm install 1.9.3
Add any gems you need. For me that was just foreman and heroku.
cd myApp
gem install foreman heroku
Seemed to work a treat.
OTHER TIPS
I got the same problem today. Did you install heroku thru heroku-toolbelt.pkg??
Try use gem to reinstall heroku and foreman.
sudo gem install heroku foreman
Try this. In Procfile, do
web: node ./bin/www