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

ubby3x7f  于 9个月前  发布在  其他
关注(0)|答案(4)|浏览(82)

刚刚部署了一个应用程序,但我在网上得到的消息是:
应用程序错误
应用程序中发生错误,您的页面无法提供。请稍后再试。
如果您是应用程序所有者,请查看日志以了解详细信息。”
这是日志中的一个样本,但我不知道出了什么问题。

$ 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
7rfyedvj

7rfyedvj1#

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

#!/usr/bin/env ruby.exe

#!/usr/bin/env ruby

这是错误的!
比你通常能做的:

heroku run rake db:migrate
rks48beu

rks48beu2#

TL;DR

这个问题不是windows heroku run rake db:migrate error "/usr/bin/env: ruby.exe: No such file or directory"的完全重复,但答案基本相同:使用#!/usr/bin/env ruby代替。

Shebang is Wrong

这是错误的。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技巧”,除非你有特定的需求。

舍邦目标

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

v1l68za4

v1l68za43#

运行以下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

现在,它应该工作。

cetgtptt

cetgtptt4#

从Heroku-22开始,ruby is no longer included by default
堆栈不再包含系统Ruby安装。这不会影响绝大多数用户,因为Ruby应用程序将使用Ruby构建包提供的Ruby安装。
如果你在升级到heroku-22后立即看到上面的错误,你需要添加Ruby buildpack

相关问题