【问题标题】:Deploy Sinatra app on Heroku在 Heroku 上部署 Sinatra 应用程序
【发布时间】:2012-04-11 09:05:09
【问题描述】:

我有一个简单的 Sinatra 应用程序。

web.rb:

require 'sinatra'

get '/' do 
    "Hello" 
end

宝石文件:*

source :rubygems

gem 'sinatra', '1.1.0'
gem 'thin', '1.2.7'

config.ru:

require './web'
run Sinatra::Application

但是当我在 Heroku 上部署我的应用程序时,我会在日志中看到错误:

2012-03-27T19:17:48+00:00 heroku[router]: Error H14 (No web processes running) -> GET furious-waterfall-6586.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=

我该如何解决?

【问题讨论】:

  • heroku logs还有什么有用的吗?
  • 没什么。只有这个错误。 'heroku ps' 表明没有正在运行的进程。 “heroku 重启”对我没有帮助
  • 我们可以知道问题出在哪里吗?
  • 我不知道。我刚刚将 sinatra-bootstrap 作为我的项目的模板,它可以工作。

标签: ruby heroku sinatra


【解决方案1】:

您需要在您的config.ru 旁边有一个Procfile 文件来告诉Heroku 如何运行您的应用程序。下面是一个例子Procfile的内容:

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

Heroku Ruby docs on Procfiles

编辑:这是我的一个 sinatra/Heroku 应用程序中的 config.ru 示例:

$:.unshift File.expand_path("../", __FILE__)
require 'rubygems'
require 'sinatra'
require './web'
run Sinatra::Application

您可能需要 sinatra 和 ruby​​gems 才能使其工作。

【讨论】:

  • @demas 我添加了一个示例 config.ru 文件以防万一。您的 Gemfile 看起来很可靠(虽然那是 sinatra 的一个旧版本,但不确定它是否可以播放)
  • 你能在 Github 上创建最小的 Sinatra-app 吗?我已经尝试过您的更改,但对我没有帮助
  • 当然,如果你到时候还没想好,我会在几个小时内完成一个。抱歉,到目前为止,我的 sinatra 应用程序已关闭源代码 :((
  • 在此期间您可能会发现这个 sinatra-bootstrap 项目很有用:github.com/adambair/sinatra-bootstrap
  • 据我所知,不需要 Procfile。
【解决方案2】:

以下是创建部署到 Heroku 的最小 sinatra 应用程序的方法:

app.rb:

require 'sinatra'

get '/' do
  "hello world"
end

宝石文件:

source 'https://rubygems.org'

gem 'heroku'
gem 'sinatra'
gem 'thin'

config.ru:

require './app'
run Sinatra::Application

在您的命令行中键入这些命令进行部署(不带$ 符号):

$ bundle install
$ git init
$ git add -f app.rb Gemfile Gemfile.lock config.ru
$ git commit -am "initial commit"
$ heroku create <my-app-name>
$ git push heroku master

然后测试您的应用:

$ curl <my-app-name>.heroku.com

你应该看到:

hello world

【讨论】:

  • 我在尝试上述方法时遇到此错误“源:rubygems 已被弃用,因为 HTTP 请求不安全。如果可能,请将源更改为 'rubygems.org',否则请更改为 'rubygems.org' 。”
  • @JGallardo,感谢您的评论! Bundler 希望您使用 HTTPS 而不是 HTTP,因此您只需将行 source :rubygems 更改为 source 'https://rubygems.org'。我也在我的回答中改变了这一点。干杯
  • heroku gem 现已弃用(由 Heroku Toolbelt 取代)。更多信息在这里:devcenter.heroku.com/articles/getting-started-with-ruby
【解决方案3】:

过去我曾多次遇到此问题,这完全是因为我没有将我的 config.ru 文件包含在 [app].rb 的要求中,然后推送到 Heroku。即使我后来添加它并重新启动,Heroku 也永远不会拿起它。

  • 销毁 Heroku 网站 (http://www.heroku.com) 上的小应用程序
  • 然后从你的项目文件夹中删除遥控器

    $ git remote rm heroku
    
  • 然后重新创建应用程序

【讨论】:

  • 我刚刚遇到了 OP 报告的相同问题,这是解决问题的唯一方法。谢谢!
  • 这里也一样。似乎一旦你推送了一个缺少或不正确 config.ru 的应用程序,唯一的解决办法就是重新创建它。
  • 非常感谢您的帮助。这是唯一有效的方法。
【解决方案4】:

通过将 gem 'heroku' 添加到 Gemfile,我得到了它的工作。不需要 Procfile。

【讨论】:

    【解决方案5】:

    作为更新,这是我创建的一个稍微更小的应用程序,并确认到今天可以正常工作。不需要薄 gem,也不需要 Procfile 来获得初始工作应用程序。

    宝石文件

    source 'https://rubygems.org'
    gem 'sinatra'
    

    config.ru

    require './app'
    
    run Sinatra::Application
    

    注意:require 行使用 './app' 而不是 'app'。

    app.rb

    require 'sinatra'
    
    get '/' do
      'Hello, World! Find me in app.rb'
    end
    

    如果你想使用这个模板,你可以复制它,打包,推送 Git 仓库。

    $ git init
    $ git add .
    $ git commit -m "initial sinatra app"
    $ bundle
    $ git add Gemfile.lock
    $ git commit -m "bundle install"
    $ heroku create
    $ git push heroku master
    $ heroku open
    

    【讨论】:

    • Gemfile 为我做的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2016-11-25
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多