Justin Garrick
Justin Garrick

Reputation: 14947

"bin/rails: No such file or directory" w/ Ruby 2 & Rails 4 on Heroku

While following the Rails 4 Beta version of Michael Hartl's Ruby on Rails Tutorial, my app fails to start on Heroku, but runs fine locally with bundle exec rails server. Checking heroku logs -t reveals the following error:

$ heroku[web.1]: State changed from crashed to starting
$ heroku[web.1]: Starting process with command `bin/rails server 
-p 33847 -e $RAILS_ENV`
$ app[web.1]: bash: bin/rails: No such file or directory
$ heroku[web.1]: Process exited with status 127
$ heroku[web.1]: State changed from starting to crashed
$ heroku[web.1]: Error R99 (Platform error) -> Failed to launch the 
dyno within 10 seconds
$ heroku[web.1]: Stopping process with SIGKILL

If I heroku run bash and check the bin directory, I can see that there is not a rails executable:

~$ ls bin
erb  gem  irb  node rdoc  ri  ruby  testrb

What have I done wrong? I followed the tutorial exactly.

Upvotes: 59

Views: 32811

Answers (8)

tomb
tomb

Reputation: 1436

On rails 5.2.6, rake app:update:bin worked for me. Now deployment to heroku is working.

Upvotes: 0

Kirit  Vaghela
Kirit Vaghela

Reputation: 12674

Steps :

  1. bundle config --delete bin # Turn off Bundler's stub generator

  2. rake rails:update:bin # Use the new Rails 4 executables

  3. git add bin or git add bin -f # Add bin/ to source control

  4. git commit -a -m "you commit message"

  5. git push heroku master

  6. heroku open

Upvotes: 9

SirParn
SirParn

Reputation: 21

I had the very same problem that you did. The issue lied in the fact that the bin folder was never pushed to the heroku repository.

I looked, I looked, and then I looked again, there was no rule in the .gitignore file for the bin/ folder...

Then, after a lot of pain and anguish, I realized that a couple of months before I had created a global .gitignore that would ignore all bin folders of all my repositories (why lord, why??).

I deleted the global .gitignore, and everything worked fine.

Upvotes: 1

user4502882
user4502882

Reputation: 1

I can confirm running rake rails:update:bin works, as said by @Ryan Taylor.

I think I had this problem because I originally created this Rails app on Windows. Running the command above on Linux solved for me.

Also, on changing from Windows to Linux for development, it is a good idea to delete Gemfile.lock file and run bundle install to generate it again without Windows specific gems listed there.

Upvotes: -1

Ryan Taylor
Ryan Taylor

Reputation: 13465

I had this issue because the permissions on my ~/bin directory were 644 instead of 755. Running rake rails:update:bin locally (on Mac/*nix) and then pushing the changes fixed the problem.

Upvotes: 3

user2697012
user2697012

Reputation: 29

We didn't have a myapp/bin directory in our rails 4 app, so we created one and then copied in the my app/script/rails file, plus the bundle and rake files from under rvm/ruby/bin and then added these to the repo for git and pushed it up to heroku and all was well.

Upvotes: 0

JanuskaE
JanuskaE

Reputation: 1304

I had this problem also since I upgraded to rails 4.0.0

Run this command

rake rails:update:bin

You can go here for more info https://devcenter.heroku.com/articles/rails4

Upvotes: 105

Justin Garrick
Justin Garrick

Reputation: 14947

After struggling with this for a bit, I noticed that my Rails 4 project had a /bin directory, unlike some older Rails 3 projects I had cloned. /bin contains 3 files, bundle, rails, and rake, but these weren't making it to Heroku because I had bin in my global .gitignore file.

This is a pretty common ignore rule if you work with Git and other languages (Java, etc.), so to fix this:

  1. Remove bin from ~/.gitignore
  2. Run bundle install
  3. Commit your changes with git add . and git commit -m "Add bin back"
  4. Push your changes to Heroku with git push heroku master

Upvotes: 40

Related Questions