如何用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. 部署与验证步骤
- 将
Dockerfile和docker-compose.yml放置在项目根目录 - 构建镜像并启动服务:
docker-compose up --build - 等待依赖安装完成后,访问
http://localhost:3000验证应用是否正常运行 - 如需后台运行,添加
-d参数:docker-compose up --build -d
内容的提问来源于stack exchange,提问作者ylluminate
相关产品推荐
相关产品推荐

