无法将我的简单Sinatra应用程序部署到Heroku



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

Config.ru

require './hello_app'
run Sinatra::Application

Gemfile

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等,每次都会遇到同样的错误。我是一个新的学习者,我已经走到了死胡同。有什么关于我如何前进的想法吗?

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

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

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

我的Gemfile是:

source "https://rubygems.org"
ruby "2.7.2"
gem "sinatra"
...
gem "rack"

我不知道机架宝石是否有必要,我在尝试让应用程序在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控制台中,我发现我可以为这个项目选择两个dynos。如果我仅启用dev bundle exec rackup应用程序根本没有加载。如果我启用仅web APP_ENV=production bundle exec rackup -p "$PORT",页面已加载,但它只是说GET /

我突然想到,我从未在任何地方设置APP_ENV。所以我从Procfile中删除了那个部分。现在Heroku dyno列出了"web bundle exec rackup"$PORT";。成功了!

相关内容

最新更新