从入门到精通:GitHub Ruby on Rails项目在Jetson Nano的部署实战

云信安装大师
90
AI 质量分
10 5 月, 2025
3 分钟阅读
0 阅读

从入门到精通:GitHub Ruby on Rails项目在Jetson Nano的部署实战

引言

Jetson Nano作为一款强大的边缘计算设备,能够运行各种Web应用。本文将带你从零开始,将一个GitHub上的Ruby on Rails项目部署到Jetson Nano上。即使你是Rails或Jetson Nano的新手,也能通过本教程顺利完成部署。

准备工作

硬件要求

  • Jetson Nano开发板(建议4GB内存版本)
  • 至少32GB的microSD卡
  • 稳定的网络连接
  • 电源适配器(5V/4A)

软件要求

  • Jetson Nano系统:建议使用JetPack 4.6或更高版本
  • Ruby版本:2.7.x或3.0.x
  • Rails版本:6.x或7.x

第一步:设置Jetson Nano基础环境

代码片段
# 1. 更新系统软件包
sudo apt update && sudo apt upgrade -y

# 2. 安装基础依赖
sudo apt install -y curl git libssl-dev libreadline-dev zlib1g-dev \
    autoconf bison build-essential libyaml-dev \
    libncurses5-dev libffi-dev libgdbm-dev libpq-dev

注意事项
– Jetson Nano基于ARM架构,某些gem可能需要原生编译
– 安装过程可能较慢,请耐心等待

第二步:安装Ruby环境

我们使用rbenv来管理Ruby版本:

代码片段
# 1. 安装rbenv和ruby-build
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# 2. 安装Ruby (这里以3.0.2为例)
rbenv install 3.0.2
rbenv global 3.0.2

# 3. 验证安装
ruby -v

常见问题解决
如果编译失败,可能是内存不足,尝试添加swap空间:

代码片段
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

第三步:安装Rails和项目依赖

代码片段
# 1. 安装Rails gem (这里以6.1.4为例)
gem install rails -v '6.1.4'

# 2. Clone GitHub项目 (替换为你的项目地址)
git clone https://github.com/yourusername/your-rails-app.git
cd your-rails-app

# 3. 安装bundler并处理依赖
gem install bundler:2.2.17 # Rails6推荐bundler版本

# ARM架构可能需要额外配置(重要!)
bundle config set force_ruby_platform true # ARM架构需要此设置

bundle install --path vendor/bundle --without production # skip production gems if needed

# 4. (可选)如果使用JavaScript运行时(如Node.js)
sudo apt install -y nodejs npm # or use nvm to manage node versions if needed

实践经验
– ARM架构下某些gem可能需要特殊处理,force_ruby_platform是关键配置
– SQLite是默认数据库,如需PostgreSQL需额外安装libpq-dev

第四步:数据库设置和迁移

代码片段
# SQLite是Rails默认数据库,无需额外配置(适合开发环境)

# PostgreSQL用户需要先创建数据库(示例命令)
sudo apt install -y postgresql postgresql-contrib libpq-dev postgresql-client postgresql-client-common 
sudo -u postgres createuser $USER --createdb # create db user with your current username 

# Rails数据库设置(根据你的config/database.yml配置)
rails db:create 
rails db:migrate 
rails db:seed # if you have seed data 

第五步:测试Rails服务器运行

代码片段
# Jetson Nano上建议使用Puma作为服务器(默认)
rails server -b 0.0.0.0 -p3000 

# or for production-like environment 
RAILS_ENV=production rails assets:precompile 
RAILS_ENV=production rails server -b0.0.0.0 -p3000 

访问应用
在局域网内的其他设备上访问 http://<jetson-nano-ip>:3000

Nginx + Puma生产环境部署(可选)

对于生产环境,建议使用Nginx反向代理:

代码片段
# Install Nginx 
sudo apt install -y nginx 

# Create a config file for your app at /etc/nginx/sites-enabled/yourapp.conf with content like:
server {
    listen80;
    server_name yourdomain.com; # or jetson-nano IP

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# Test Nginx config and restart 
sudo nginx -t && sudo systemctl restart nginx 

# Start Puma as a service (create /etc/systemd/system/puma.service) with content like:
[Unit]
Description=Puma HTTP Server for myapp 
After=network.target 

[Service]
Type=simple 
User=ubuntu # your username 
WorkingDirectory=/home/ubuntu/myapp # your app path 
ExecStart=/home/ubuntu/.rbenv/shims/bundle exec puma -C config/puma.rb 

Restart=always 

[Install]
WantedBy=multi-user.target 

# Then enable and start the service:
sudo systemctl enable puma.service 
sudo systemctl start puma.service 

Jetson Nano特定优化技巧

  1. 性能优化

    代码片段
    sudo nvpmodel -m0 # Max performance mode (10W) 
    sudo jetson_clocks # Enable all CPU cores at max frequency 
    
  2. 监控资源使用

    代码片段
    tegrastats # Shows CPU, GPU, RAM, etc usage in real-time  
    
  3. 温度管理

    代码片段
    sudo sh -c 'echo "options gpu_adaptive_cpu_boost=1" > /etc/modprobe.d/jetson-nano.conf'
    sudo reboot  
    

Troubleshooting常见问题解决指南

Q1: bundle install时编译失败怎么办?

A: ARM架构下某些gem需要原生编译失败时尝试:

代码片段
bundle config set force_ruby_platform true # Force pure Ruby versions where possible  
export MAKE="make --jobs=$(nproc)"         # Use all cores for compilation  
bundle install                            # Retry installation  

Q2: JavaScript运行时错误?

A: Rails需要JavaScript运行时,可以:

代码片段
sudo apt install nodejs                   # Install Node.js as runtime  
OR  
gem install therubyracer                  # Alternative Ruby-based runtime  

Q3: Memory不足错误?

A: Jetson Nano内存有限,可以:
1) Add swap space as shown earlier
2) Reduce Puma workers in config/puma.rb
3) Precompile assets before starting server

Q4: Database连接问题?

A: Check database.yml configuration and ensure database service is running:

代码片段
sudo service postgresql status            # For PostgreSQL users  
sqlite3 db/development.sqlite3 "SELECT * FROM sqlite_master;" # For SQLite users  

Conclusion总结回顾

通过本教程我们完成了以下关键步骤:

1️⃣ Jetson Nano基础环境设置和更新
2️⃣ Ruby和Rails环境的正确安装(ARM架构特殊处理)
3️⃣ GitHub项目的克隆和依赖处理(重点注意force_ruby_platform
4️⃣ Database配置和迁移(SQLite或PostgreSQL)
5️⃣ Server启动测试和生产环境部署选项

Jetson Nano虽然资源有限但完全能够胜任中小型Rails应用的运行。关键是要注意ARM架构的特殊性并做好性能优化。

原创 高质量