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

如何用Docker Compose搭建Heroku Cedar-14环境复活旧Rails 3应用

搭建兼容Ruby on Rails 3 + Ubuntu 14.04的Docker环境(适配Heroku Cedar-14)

要复活这款基于Heroku Cedar-14(Ubuntu 14.04)的Ruby on Rails 3应用,我们将通过自定义Ubuntu 14.04镜像+Docker Compose来搭建匹配的运行环境,以下是具体实现步骤:

1. 编写自定义Dockerfile(基于Ubuntu 14.04)

创建Dockerfile文件,手动构建包含Ruby 1.9.3-p551及所有依赖的镜像:

# 基础镜像使用Ubuntu 14.04
FROM ubuntu:14.04

# 设置环境变量避免交互提示
ENV DEBIAN_FRONTEND=noninteractive

# 更新系统并安装基础依赖
RUN apt-get update && apt-get install -y \
    build-essential \
    curl \
    git \
    libmysqlclient-dev \
    imagemagick \
    libmagickwand-dev \
    nodejs \
    && rm -rf /var/lib/apt/lists/*

# 安装Ruby 1.9.3-p551(使用rbenv简化版本管理)
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv \
    && echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc \
    && echo 'eval "$(rbenv init -)"' >> ~/.bashrc \
    && git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build \
    && bash -c "source ~/.bashrc && rbenv install 1.9.3-p551 && rbenv global 1.9.3-p551"

# 安装适配Ruby 1.9.3的bundler版本
RUN bash -c "source ~/.bashrc && gem install bundler -v 1.17.3"

# 设置工作目录
WORKDIR /app

# 复制Gemfile和Gemfile.lock到容器
COPY Gemfile Gemfile.lock ./

# 安装所有gem依赖
RUN bash -c "source ~/.bashrc && bundle install"

# 复制应用代码到容器
COPY . .

# 暴露puma默认端口
EXPOSE 3000

说明:选择rbenv精准控制Ruby版本;安装libmysqlclient-dev适配mysql2 <0.3,imagemagick和libmagickwand-dev满足rmagick 2.13.4的编译需求。

2. 编写Docker Compose配置文件

创建docker-compose.yml,配置应用服务、环境变量和代码挂载:

version: '3'
services:
  rails-app:
    build: .
    command: bash -c "source ~/.bashrc && bundle exec puma -C config/puma.rb"
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    environment:
      # 数据库连接配置
      - DATABASE_URL=mysql2://<DB_USER>:<DB_PASSWORD>@<DB_HOST>:<DB_PORT>/<DB_NAME>
      # AWS S3 配置
      - AWS_ACCESS_KEY_ID=<YOUR_AWS_ACCESS_KEY>
      - AWS_SECRET_ACCESS_KEY=<YOUR_AWS_SECRET_KEY>
      - S3_BUCKET_NAME=<YOUR_S3_BUCKET>
      # AWS SES 配置
      - AWS_SES_ACCESS_KEY_ID=<YOUR_SES_ACCESS_KEY>
      - AWS_SES_SECRET_ACCESS_KEY=<YOUR_SES_SECRET_KEY>
      # 其他环境变量
      - RAILS_ENV=production # 可根据需求切换为development
      - AIRBRAKE_API_KEY=<YOUR_AIRBRAKE_KEY>

3. 关键配置说明

  • Gem依赖确保一致:项目根目录下的Gemfile需严格匹配需求:

    source 'http://rubygems.org'
    
    ruby '1.9.3'
    
    gem 'rails', '~> 3.0.10'
    gem "paperclip", "2.3.8"
    gem "rmagick", "2.13.4"
    gem "acts_as_list", "~> 0.1.4"
    gem "aws-ses", :require => "aws/ses"
    gem "ffaker"
    gem "validates_timeliness", "3.0.13"
    gem "date_validator"  
    gem 'mysql2', '< 0.3' 
    gem 'airbrake'
    gem 'aws-s3', :require => 'aws/s3'
    gem 'puma'
    gem 'rack-attack'
    gem 'rails_12factor'
    

    同时使用提供的Gemfile.lock锁定依赖版本,避免安装时出现版本差异。

  • 环境变量替换:将配置中<>包裹的占位符替换为实际的数据库连接信息、AWS密钥及其他服务配置。

4. 部署与验证步骤

  1. 将Dockerfile和docker-compose.yml放置在项目根目录
  2. 构建镜像并启动服务:
    docker-compose up --build
    
  3. 等待依赖安装完成后,访问http://localhost:3000验证应用是否正常运行
  4. 如需后台运行,添加-d参数:
    docker-compose up --build -d
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:45:29