【问题标题】:Getting "/usr/bin/env: ruby.exe: No such file or directory" on Heroku在 Heroku 上获取“/usr/bin/env: ruby​​.exe: No such file or directory”
【发布时间】:2013-08-25 20:54:48
【问题描述】:

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

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

如果您是应用程序所有者,请查看您的日志以了解详细信息。”

这是日志中的一个示例,但我不知道出了什么问题。

$ 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

【问题讨论】:

  • 听起来像this...?
  • 抱歉刚刚习惯了帖子的格式。我刚才试过了,我的应用程序不见了……“您要查找的页面不存在。您可能输入了错误的地址或页面可能已移动。”我做了 git add 和 commit 并推送到了肠道集线器,heroku 也重新启动了 heroku 服务器......

标签: ruby-on-rails heroku


【解决方案1】:

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

改变

#!/usr/bin/env ruby.exe

#!/usr/bin/env ruby

这就是错误!

比你通常可以做的:

heroku run rake db:migrate

【讨论】:

  • 刚刚尝试过,但仍然没有...我仍然得到相同的丢失页面窗口...用更多信息更新了我的帖子。我真的被困在这里了......
【解决方案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 目标

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

【讨论】:

  • 我按照建议做了,但仍然没有...它仍然说我正在寻找的页面丢失或不存在...我现在迷路了...
  • @naktinis 除了原始问题中的问题之外,您显然还有其他问题。您可能需要进行一些故障排除,然后就您的其他问题提出问题。实际上,请注意,如果您在与目标平台相同的应用程序堆栈(例如操作系统、Web 服务器和解释器)上开发,您的一些问题可能会消失。您的里程可能会有所不同。
  • 这是我的 github 仓库 github.com/eradication/Frequency 这可能有帮助吗?我已经尝试了所有方法,但在日志中仍然是相同的,我不再看到任何错误...
  • 我昨天花了一整天的时间试图解决这个问题,但仍然没有运气......我添加了更多日志,这些是我在应用所有建议的更改后得到的。跨度>
  • 这个答案有帮助,因为我仍然拥有最初在 Windows 机器上创建此应用程序的 .exe。但是,这并没有完全解决我的问题,因为我仍然遇到同样的错误。然后我注意到我在第一行有一个回车符(我猜是 Windows 剩下的)。我使用dos2unix 从我的bin/* 文件中删除了这个回车,然后提交并将其推送到heroku。这就是为我解决的问题。
【解决方案3】:

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

现在,它应该可以工作了。

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 2014-12-02
    • 2015-10-07
    • 2021-03-28
    • 2013-07-11
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多