2013-07-11 23 views
54

Idąc szyn 4 Beta wersją Michael Hartl na Ruby on Rails Tutorial, moja aplikacja nie uruchomi się na Heroku, ale działa dobrze lokalnie z bundle exec rails server. Sprawdzanie heroku logs -t ujawnia następujący błąd:"bin/szyny: Nie ma takiego pliku lub katalogu" w/Ruby 2 & Rails 4 na Heroku

$ 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 

Gdybym heroku run bash i sprawdzić katalog bin, widzę, że nie ma nierails wykonywalny:

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

Co zrobiłem źle? Śledziłem dokładnie samouczek.

Odpowiedz

38

Po tym, jak przez chwilę się z tym zmagałem, zauważyłem, że mój projekt Rails 4 miał katalog /bin, w przeciwieństwie do niektórych starszych projektów Rails 3, które sklonowałem. /bin zawiera 3 pliki, bundle, rails i rake, ale te nie dotarły do ​​Heroku, ponieważ miałem bin w moim globalnym pliku .gitignore.

Jest to dość powszechne ignorowanie rządzić, jeśli pracujesz z Git i innych języków (Java, itp), tak aby rozwiązać ten problem:

  1. Usuń bin od ~/.gitignore
  2. Run bundle install
  3. Commit twoje zmiany w git add . i git commit -m "Add bin back"
  4. push zmiany Heroku z git push heroku master
+3

Jest to przewodnik Heroku na uruchamianie aplikacji Rails4 na Heroku - https://devcenter.heroku.com/articles/rails4 –

+1

Tak, to nie wspomina o konieczności bin w waszym. gitignore, ale samouczek nie. Pomyślałem, że stworzę to na wypadek, gdyby ktoś miał podobny problem. –

+0

@justingarrick czy naprawdę potrzebujesz uruchomić 'bundle install'? Wygląda na dodatkowy krok. – Josh

101

miałem ten problem również od uaktualnieniu do szyn 4.0.0

uruchomieniu tego polecenia

rake rails:update:bin 

Możesz iść tutaj, aby uzyskać więcej informacji https://devcenter.heroku.com/articles/rails4

+2

Dobre informacje dla tych, którzy aktualizują z Rails 3 itd., Ale problem z pytaniem pojawił się w nowej aplikacji. Poza tym to ci nie pomoże, jeśli masz te katalogi gitignored, ponieważ nadal nie dostaną gita zepchniętego na Heroku. –

+2

Przeprowadzka do Rails 4.0.0, to był zdecydowanie problem. –

+0

Wydanie tego polecenia pomogło mi ponownie uruchomić moją aplikację heroku. Wielkie dzięki. – Francisco

0

Nie mają katalog myapp/bin w naszej aplikacji rails 4, więc utworzyliśmy jeden plik, a następnie skopiowaliśmy go do pliku app/script/rails, a także pliki bundle i rake spod katalogu rvm/ruby ​​/ bin, a następnie dodaliśmy je do repo dla git i pchnął go do Heroku i wszystko było dobrze.

3

Miałem ten problem, ponieważ uprawnienia do mojego katalogu ~/bin były 644 zamiast 755. Uruchamianie rake rails:update:bin lokalnie (na Mac/* nix), a następnie wypychanie zmian naprawia problem.

-1

Potwierdzam uruchamianie prac rake rails:update:bin, jak powiedział @Ryan Taylor.

Myślę, że miałem ten problem, ponieważ pierwotnie stworzyłem tę aplikację Rails w systemie Windows. Uruchomiono powyższe polecenie w systemie Linux.

Po zmianie z systemu Windows na system Linux na potrzeby programowania dobrze jest usunąć plik Gemfile.lock i uruchomić bundle install, aby wygenerować go ponownie bez wymienionych tam klejnotów systemu Windows.

-1

Miałem ten sam problem, co ty. Problem polegał na tym, że folder bin nigdy nie był przesyłany do repozytorium Heroku.

patrzyłem, patrzyłem, a potem spojrzał znowu, nie było regułą w pliku .gitignore do folderu bin/...

Następnie, po dużo bólu i cierpienia, zdałem sobie sprawę, że kilka miesięcy przed utworzeniem globalnego pliku .gitignore, który zignorowałby wszystkie foldery bin wszystkich moich repozytoriów (dlaczego lord, dlaczego?).

Usunąłem plik globalny .gitignore i wszystko działało poprawnie.

9

Kroki:

  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