2

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

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

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

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

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

3 回答 3

12

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

改变

#!/usr/bin/env ruby.exe

#!/usr/bin/env ruby

这就是错误!

比你通常可以做的:

heroku run rake db:migrate
于 2013-08-26T16:52:30.003 回答
2

TL;博士

这个问题与windows heroku run rake db:migrate error "/usr/bin/env: ruby​​.exe: No such file or directory" 并不完全相同,但答案大致相同:#!/usr/bin/env ruby改用。

社邦错了

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 技巧”,除非您有特定需求。

社邦目标

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.

于 2013-08-25T21:34:21.317 回答
1

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

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

于 2017-10-03T07:01:05.257 回答