刚刚部署了一个应用,但我上网的消息是:
应用程序错误
应用程序中发生错误,无法提供您的页面。请稍后重试。如果您是应用程序所有者,请查看日志以获取详细信息。“
以下是日志中的示例,但我无法弄清楚出了什么问题。
$ 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
答案 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)
此问题与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
。
答案 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
现在,应该有效。