我的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.rb
或rackup 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";。成功了!