如何将Ruby on Rails应用打包为可执行文件(Ruby3.2.3/Rails7.1.3)
打包Ruby 3.2.3 + Rails 7.1.3应用为可执行文件的可行方案
针对你使用的Ruby和Rails版本,以下是几个适配当前版本的打包方案,按实用性排序:
1. Docker容器化(推荐,跨平台兼容性最强)
虽然不是原生可执行文件,但Docker能把整个应用环境(Ruby、Rails、依赖、配置)打包成镜像,对方只需安装Docker就能一键运行,无需担心版本兼容问题。
步骤:
- 在项目根目录创建
Dockerfile:FROM ruby:3.2.3-slim RUN apt-get update && apt-get install -y build-essential libpq-dev nodejs npm WORKDIR /app COPY Gemfile Gemfile.lock ./ RUN bundle install --without development test COPY . . RUN RAILS_ENV=production bundle exec rails assets:precompile EXPOSE 3000 CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"] - 构建镜像:
docker build -t my_rails_app . - 导出镜像为本地文件:
docker save -o my_rails_app.tar my_rails_app - 对方操作:导入镜像并运行,命令为
docker load -i my_rails_app.tar && docker run -p 3000:3000 my_rails_app,之后访问http://localhost:3000即可使用。
2. ruby-packer(原生可执行文件)
社区维护的分支已适配Ruby 3.2+,能把Ruby解释器、依赖和应用打包成单个原生可执行文件,支持Linux和macOS。
步骤:
- 找到社区维护的适配Ruby 3.x的ruby-packer分支,克隆到本地后进入目录编译工具:
cd ruby-packer rake - 回到你的Rails项目根目录,执行打包命令(生成可执行文件
my_app):../ruby-packer/bin/rubyc -o my_app ./bin/rails server - 注意:打包前确保
Gemfile.lock完整,所有依赖已通过bundle install安装;需针对目标操作系统分别打包(Linux包不能在macOS运行,反之亦然)。
3. Warbler(打包为WAR文件,适合Java环境)
可以把Rails应用打包成WAR文件,对方只需有Java 11+环境,就能通过Java命令直接运行,无需安装Ruby。
步骤:
- 添加Warbler到开发依赖:
# Gemfile gem 'warbler', group: :development - 安装依赖并生成配置:
bundle install bundle exec warble config - 打包WAR文件:
bundle exec warble war - 对方运行:
java -jar your_app.war,之后访问http://localhost:3000即可。
注意事项
- Rails应用依赖较多动态加载逻辑,原生可执行打包工具可能会遗漏部分依赖,打包后建议在目标系统测试运行。
- Windows平台的原生打包支持较弱,优先推荐Docker或Warbler方案。
内容的提问来源于stack exchange,提问作者Fuoad
相关产品推荐
相关产品推荐

