【问题标题】:Unable to deploy my simple Sinatra app to Heroku无法将我的简单 Sinatra 应用程序部署到 Heroku
【发布时间】:2021-01-30 20:10:30
【问题描述】:

我的 Sinatra 应用程序非常简单。

Config.ru

require './hello_app'
run Sinatra::Application

宝石文件

source 'https://rubygems.org'
ruby "2.6.6"
gem 'sinatra'

hello_app.rb

require 'sinatra'

get '/' do
  "Hello World!"
end

此应用可在本地运行。但是,当我尝试部署到 Heroku 时,出现以下错误:

2020-12-27T23:29:11.036031+00:00 heroku[web.1]: State changed from crashed to starting
2020-12-27T23:29:12.572800+00:00 heroku[web.1]: Starting process with command `APP_ENV=production bundle exec rackup -p "57643"`
2020-12-27T23:29:16.071115+00:00 app[web.1]: [heroku-exec] Starting
2020-12-27T23:29:16.663254+00:00 app[web.1]: bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.6.0/bin/rackup)
2020-12-27T23:29:16.663275+00:00 app[web.1]: Gem::Exception: can't find executable rackup for gem rack. rack is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
2020-12-27T23:29:16.663276+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.1.4/lib/bundler/rubygems_integration.rb:374:in `block in replace_bin_path'
2020-12-27T23:29:16.663277+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/bundler-2.1.4/lib/bundler/rubygems_integration.rb:402:in `block in replace_bin_path'
2020-12-27T23:29:16.663277+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/bin/rackup:23:in `<top (required)>'
2020-12-27T23:29:16.722478+00:00 heroku[web.1]: Process exited with status 1
2020-12-27T23:29:16.770208+00:00 heroku[web.1]: State changed from starting to crashed

我尝试了其他线程中提供的许多建议,例如添加 Procfile 等,但每次都会遇到相同的错误。我是一个新的学习者,我已经走到了死胡同。关于如何继续前进的任何想法?

【问题讨论】:

标签: ruby sinatra


【解决方案1】:

我刚刚遇到了一个类似的问题,现在已经解决了。我的应用名为生日(在 app.rb 中定义为 def class Birthday &lt; Sinatra::Base)。

我有一个config.ru 文件,上面写着:

require_relative "./lib/app.rb"
run Birthday

我的 Gemfile 是:

source "https://rubygems.org"

ruby "2.7.2"
gem "sinatra"
...
gem "rack"

我不知道机架 gem 是否必要,我在尝试让应用程序在 Heroku 上运行时添加了它。我可以使用ruby app.rbrackup config.ru 在本地运行我的项目。但它在 Heroku 上运行不正确。 因此,我在其他地方的答案中添加了一个 Procfile,说:

dev: bundle exec rackup
web: APP_ENV=production bundle exec rackup -p "$PORT"

您的 Heroku 进程报告:Starting process with command 'APP_ENV=production bundle exec rackup -p "57643"',所以这可能是一个类似的问题。

Procfile 没有工作,我的应用没有正确加载。在我的 Heroku 控制台中,我发现我可以为该项目选择两个测功机。如果我只启用 dev bundle exec rackup 应用程序根本没有加载。如果我启用 仅限web APP_ENV=production bundle exec rackup -p "$PORT",页面已加载,但它只是说GET /

我突然想到我从来没有在任何地方设置过 APP_ENV。所以我从 Procfile 中删除了那部分。现在 Heroku dyno 列出了 `web bundle exec rackup -p "$PORT"。成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2017-08-27
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多