在Heroku上获取“/ usr / bin / env:ruby.exe:没有这样的文件或目录”

时间:2013-08-25 20:54:48

标签: ruby-on-rails heroku

刚刚部署了一个应用,但我上网的消息是:

  

应用程序错误
  应用程序中发生错误,无法提供您的页面。请稍后重试。

     

如果您是应用程序所有者,请查看日志以获取详细信息。“

以下是日志中的示例,但我无法弄清楚出了什么问题。

$ heroku logs
←[36m2013-08-25T20:08:28.849427+00:00 heroku[web.1]:←[0m State changed from cras
 hed to starting
←[36m2013-08-25T20:08:34.637820+00:00 heroku[web.1]:←[0m Starting process with c
ommand `bin/rails server -p 47444 -e $RAILS_ENV`
←[36m2013-08-25T20:08:35.451207+00:00 app[web.1]:←[0m /usr/bin/env: ruby.exe: No
 such file or directory
←[36m2013-08-25T20:08:37.130015+00:00 heroku[web.1]:←[0m Process exited with sta
tus 127
←[36m2013-08-25T20:08:37.144978+00:00 heroku[web.1]:←[0m State changed from star
 ting to crashed
 ←[36m2013-08-25T20:08:44.946201+00:00 heroku[web.1]:←[0m Error R99 (Platform err
 or) -> Failed to launch the dyno within 10 seconds
←[36m2013-08-25T20:08:44.946616+00:00 heroku[web.1]:←[0m Stopping process with S
IGKILL
←[36m2013-08-25T20:18:37.449495+00:00 heroku[web.1]:←[0m State changed from cras
hed to starting
 ←[36m2013-08-25T20:18:41.670955+00:00 heroku[web.1]:←[0m Starting process with c
ommand `bin/rails server -p 24333 -e $RAILS_ENV`
←[36m2013-08-25T20:18:42.269982+00:00 app[web.1]:←[0m /usr/bin/env: ruby.exe: No
 such file or directory
←[36m2013-08-25T20:18:43.430802+00:00 heroku[web.1]:←[0m Process exited with sta
 tus 127
←[36m2013-08-25T20:18:43.443400+00:00 heroku[web.1]:←[0m State changed from star
ting to crashed
←[33m2013-08-25T20:19:48.199235+00:00 heroku[router]:←[0m at=error code=H10 desc
="App crashed" method=GET path=/favicon.ico host=radiant-lake-2999.herokuapp.com
 fwd="82.28.231.27" dyno= connect= service= status=503 bytes=

在尝试了迄今为止所有的建议并完成相应的所有更改后,这就是我在heroku日志中获得的内容:

←[36m2013-08-27T21:34:49.397195+00:00 app[web.1]:←[0m F, [2013-08-27T20:58:04.948189    #2] FATAL -- :
←[36m2013-08-27T21:34:49.397195+00:00 app[web.1]:←[0m ActionController::RoutingError        (No route matches [GET] "/"):
←[36m2013-08-27T22:36:51.045269+00:00 app[web.1]:←[0m [2013-08-27 22:36:51] ERROR     SignalException: SIGTERM
←[36m2013-08-27T22:36:51.045269+00:00 app[web.1]:←[0m   /app/vendor/ruby- 1.9.3/lib/ruby/1.9.1/webrick/server.rb:98:in `select'
←[36m2013-08-27T22:37:01.918797+00:00 heroku[web.1]:←[0m Error R12 (Exit timeout) -  >Atleastone process failed to exit within 10 seconds of SIGTERM
←[36m2013-08-27T22:37:01.918996+00:00 heroku[web.1]:←[0m Stopping remaining processes with SIGKILL

3 个答案:

答案 0 :(得分:8)

您需要在应用程序中更改3个文件的第一行: bin/bundle bin/rails bin/rake

更改

#!/usr/bin/env ruby.exe

#!/usr/bin/env ruby

那是错误!

通常可以做到:

heroku run rake db:migrate

答案 1 :(得分:2)

TL; DR

此问题与windows heroku run rake db:migrate error "/usr/bin/env: ruby.exe: No such file or directory"不完全相同,但答案基本相同:请改用#!/usr/bin/env ruby

Shebang是错的

shebang错了。 Heroku使用EC2 Linux实例而不是Windows作为其底层操作系统。您可以通过运行heroku run bash然后在命令行键入uname -a来验证这一点。

在Linux上,你的shebang需要包含Ruby解释器的完全限定路径,或者包含 env 的完全限定路径,然后是解释器在PATH环境变量中搜索。例如,以下两者在Heroku Cedar堆栈上均有效:

  • #!/app/bin/ruby
  • #!/usr/bin/env ruby

一般来说,后者被认为是Rails应用程序的最佳方法,因为它是最便携的。 Windows通常使用文件关联,并且将忽略shebang行,除非您在像Cygwin这样的POSIX层下运行,因此除非您有特定需求,否则您应该对所有跨平台源文件使用“env技巧”。

Shebang Targets

Cedar堆栈在PATH中有许多其他Ruby副本。请考虑以下事项:

$ heroku run "bash -c 'which -a ruby'"
Running `bash -c 'which -a ruby'` attached to terminal... up, run.9433
/app/bin/ruby
bin/ruby
/usr/local/bin/ruby

前两个实际上是../vendor/ruby-2.0.0/bin/ruby的符号链接,因此实际上有四个可能的shebang目标,但/app/bin/ruby是PATH中的第一个。

让你的生活变得简单。只需忽略上面的长解释,然后使用#!/usr/bin/env ruby

答案 2 :(得分:0)

运行以下rake命令

$ rake rails:update:bin
$ git status 
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   bin/bundle
    modified:   bin/rails
    modified:   bin/rake
    modified:   bin/setup
    modified:   bin/update
$ git add bin/
$ git commit -m 'updated bin'
$ git push heroku master 

现在,应该有效。