You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sinatra应用部署至Heroku失败求助:配置文件放置问题排查

Troubleshooting Your Sinatra App Deployment on Heroku

Hey there, let's work through this Sinatra deployment issue step by step—those Heroku errors can be tricky, but we'll get it sorted.

First, let's recap the common misconfigurations that cause this kind of rackup load error, since you already tried moving config.ru and app.rb around:

1. Double-Check Your File Structure

Heroku expects a standard layout for Sinatra apps. Here's the correct setup you should aim for:

your-app-root/
├── app.rb          # Your main Sinatra application file
├── config.ru       # Rack configuration file
├── Gemfile         # Ruby gem dependencies
├── Gemfile.lock    # Locked dependency versions (must be committed!)
├── Procfile        # (Optional but highly recommended) Process command
└── views/          # Your ERB/Haml templates for the two pages
    ├── page1.erb
    └── page2.erb

Make sure none of these critical files are nested in an app/ folder unless you adjust your require paths accordingly (but sticking to root is simpler for basic apps).

2. Fix Your config.ru

This is the most likely culprit. Heroku uses rackup to boot your app, so your config.ru needs to correctly load your Sinatra application.

If your app.rb uses the default Sinatra setup (no custom subclass):

# config.ru
require './app'
run Sinatra::Application

If you defined a custom Sinatra class in app.rb (like class MyApp < Sinatra::Base):

# config.ru
require './app'
run MyApp

Double-check the require path—if your app.rb was in an app/ folder, you'd need require './app/app', but again, keeping it in root avoids path headaches.

3. Verify Your Gemfile & Gemfile.lock

Heroku relies on these files to install dependencies. Make sure your Gemfile includes:

# Gemfile
source 'https://rubygems.org'
ruby '2.4.0' # Match the Ruby version in your error log (2.4.0)
gem 'sinatra'
gem 'rack'

Then run bundle install locally to generate Gemfile.lock, and make sure you commit this file to Git—Heroku won't install gems without it.

4. Add a Procfile (Optional but Critical for Consistency)

While Heroku can auto-detect rack apps, adding a Procfile removes ambiguity. Create this file in your root directory with:

web: bundle exec rackup config.ru -p $PORT

This tells Heroku exactly how to start your web process, and uses the mandatory $PORT environment variable (you can't hardcode a port like 4567 on Heroku).

5. Check the Full Error Log

Your provided log is truncated—there's probably a more specific error (like a LoadError or missing file) right before those lines. Run this command locally to see the full, live logs:

heroku logs --tail

This will show you exactly why rackup failed to load your app (e.g., "cannot load such file -- ./app" means your require path is wrong).

6. Confirm All Files Are Committed to Git

Make sure you haven't accidentally excluded any critical files with .gitignore. Run git status to check that app.rb, config.ru, Gemfile, Gemfile.lock, and Procfile are all tracked and committed.

Once you've adjusted these, redeploy with git push heroku main (or your default branch name) and test the app again.

内容的提问来源于stack exchange,提问作者user8765546

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:01