【问题标题】:Problems getting my sinatra based app to work on Heroku让我的基于 sinatra 的应用程序在 Heroku 上运行时出现问题
【发布时间】:2012-09-08 13:19:52
【问题描述】:

我制作了一个简单的 Sinatra 应用程序来运行主页。它已经在我的电脑上运行了。现在我想在 heroku 上托管它,但我无法让它运行。我不太熟悉“Gemfile”或“Procfile”等概念。

我的 ruby​​ 应用需要 Sinatra、haml 和 sinatra/r18n。我的 gemfile 看起来像这样:

source :rubygems
gem 'sinatra'
gem 'thin'
gem 'sinatra-r18n'
gem 'haml'

我的 Procfile 看起来像这样:

web: bundle exec ruby app.rb -p $PORT

我的 app.rb 是这样开始的:

# app.rb

require 'rubygems'
require 'sinatra'
require 'sinatra/r18n'
require 'haml'

enable :sessions

helpers do
  def set_lang (langcode)
...

目录中的其他文件包括 Gemfile.lock,如果我没记错的话,它是通过 bundle install 创建的,以及“r18n”、“public”、“views”的文件夹。

如果我在 heroku 上启动应用程序,“heroku ps”命令会显示应用程序“启动”,但如果我使用“heroku open”,则会收到“内部服务器错误”。

这是我推送到heroku后的“heroku日志”:

2012-09-15T19:34:54+00:00 heroku[slugc]: Slug compilation started
2012-09-15T19:35:01+00:00 heroku[api]: Release v13 created by -@gmail.com
2012-09-15T19:35:01+00:00 heroku[api]: Deploy bebc79e by -@gmail.com
2012-09-15T19:35:01+00:00 heroku[web.1]: State changed from up to starting
2012-09-15T19:35:01+00:00 heroku[slugc]: Slug compilation finished
2012-09-15T19:35:02+00:00 heroku[web.1]: Starting process with command `bundle exec ruby app.rb -p 54979`
2012-09-15T19:35:05+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-09-15T19:35:05+00:00 heroku[web.1]: State changed from starting to up
2012-09-15T19:35:06+00:00 app[web.1]: == Sinatra/1.1.0 has taken the stage on 20773 for production with backup from Thin
2012-09-15T19:35:06+00:00 app[web.1]: >> Thin web server (v1.4.1 codename Chromeo)
2012-09-15T19:35:06+00:00 app[web.1]: >> Maximum connections set to 1024
2012-09-15T19:35:06+00:00 app[web.1]: >> Listening on 0.0.0.0:20773, CTRL+C to stop
2012-09-15T19:35:06+00:00 app[web.1]: >> Stopping ...
2012-09-15T19:35:06+00:00 app[web.1]:
2012-09-15T19:35:06+00:00 app[web.1]: == Sinatra has ended his set (crowd applauds)
2012-09-15T19:35:07+00:00 heroku[web.1]: Process exited with status 0

有人知道这里出了什么问题吗?如果您对使用的概念更熟悉,也许会很明显。我也会提示帮助我解决问题的材料,但直到现在我所有的谷歌搜索/阅读都没有帮助。

28-09 更新 我现在从代码中删除了 Procfile,但仍然得到“内部服务器错误”。这里还有一些应该包含崩溃的日志:

 2012-09-28T18:04:50+00:00 heroku[web.1]: State changed from down to starting
 2012-09-28T18:04:58+00:00 heroku[web.1]: Starting process with command `bundle exec thin start -R config.ru -e production -p 30813`
 2012-09-28T18:05:01+00:00 heroku[web.1]: State changed from starting to up
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/views/start.haml:1:in `evaluate_source'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:209:in `instance_eval'
 2012-09-28T18:05:02+00:00 app[web.1]: Encoding::CompatibilityError - incompatible character encodings: ASCII-8BIT and UTF-8:
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:209:in `evaluate_source'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:127:in `evaluate'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:144:in `cached_evaluate'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/haml.rb:24:in `evaluate'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/tilt-1.3.3/lib/tilt/template.rb:76:in `render'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:452:in `render'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/app.rb:28:in `block in <top (required)>'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:370:in `haml'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:1032:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:1032:in `block in compile!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:620:in `instance_eval'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:620:in `route_eval'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:656:in `block in process_route'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:653:in `catch'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:604:in `block (2 levels) in route!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:653:in `process_route'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:603:in `block in route!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:602:in `each'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:602:in `route!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:530:in `block in call!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:706:in `instance_eval'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:741:in `dispatch!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:706:in `block in invoke'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:706:in `catch'
 2012-09-28T18:05:02+00:00 heroku[router]: GET fierce-crag-6255.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=73ms status=500 bytes=30
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:706:in `invoke'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:516:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:530:in `call!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:1168:in `synchronize'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/session/abstract/id.rb:200:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/commonlogger.rb:20:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/rack-1.4.1/lib/rack/session/abstract/id.rb:205:in `context'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:1142:in `block in call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:80:in `block in pre_process'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:53:in `process'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:78:in `pre_process'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:38:in `receive_data'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/connection.rb:78:in `catch'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.1.0/lib/sinatra/base.rb:1142:in `call'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/backends/base.rb:63:in `start'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/server.rb:159:in `start'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/controllers/controller.rb:86:in `start'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/runner.rb:185:in `run_command'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/lib/thin/runner.rb:151:in `run!'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/gems/thin-1.4.1/bin/thin:6:in `<top (required)>'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/bin/thin:19:in `load'
 2012-09-28T18:05:02+00:00 app[web.1]:  /app/vendor/bundle/ruby/1.9.1/bin/thin:19:in `<main>'
 2012-09-28T18:05:02+00:00 app[web.1]: 212.90.85.15 - - [28/Sep/2012 18:05:02] "GET / HTTP/1.1" 500 30 0.0591
 2012-09-28T18:05:03+00:00 app[web.1]: 212.90.85.15 - - [28/Sep/2012 18:05:03] "GET /favicon.ico HTTP/1.1" 200 1416 0.0109
 2012-09-28T18:05:03+00:00 heroku[router]: GET fierce-crag-6255.herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=13ms status=200 bytes=1416
 2012-09-28T18:05:03+00:00 heroku[router]: GET fierce-crag-6255.herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=4ms status=200 bytes=1416
 2012-09-28T18:05:03+00:00 app[web.1]: 212.90.85.15 - - [28/Sep/2012 18:05:03] "GET /favicon.ico HTTP/1.1" 200 1416 0.0026

【问题讨论】:

  • 你有 Starting process with command `bundle exec ruby app.rb -p 54979`Sinatra/1.1.0 has taken the stage on 20773 for production with backup from Thin – 不同的端口号,所以那里有问题。您是否在您的应用程序文件中使用set :port, 20773 设置端口?
  • 糟糕,应该是数字,而不是数字。
  • 您提供了错误发生之前的日志,但不是之后的日志。您可以在在浏览器中浏览应用程序并收到“内部服务器错误”消息后粘贴日志吗?它应该包含一个不错的大堆栈跟踪。
  • @matt 感谢您的提示。但是不,我没有在应用程序中设置任何端口。我不确定为什么那里的端口不同。
  • @canton7 好的,谢谢。我现在发布了更长的日志,这应该包括崩溃..

标签: ruby git heroku gem sinatra


【解决方案1】:

是的,我只是自己想出来的。我应该更多地关注heroku日志中的Encoding::CompatibilityError - incompatible character encodings: ASCII-8BIT and UTF-8:。我删除了所有的德语变音符号,现在它正在工作。现在编码的问题已解决here。我希望我能以某种方式解决这个问题。还是谢谢大家!

【讨论】:

    【解决方案2】:

    您不一定需要 Procfile。如果您想让 heroku 以默认方式运行您的应用程序,只需将其删除。相反,添加一个 config.ru 文件,就像在 heroku 的 this small example 中一样。

    【讨论】:

    • 谢谢,你说得对。我只添加了这个,因为我希望它能解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2020-06-22
    • 1970-01-01
    • 2012-07-19
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多