🦄 2024 独立开发者训练营,一起创业!(早鸟优惠在7天后结束)查看介绍 / 立即报名 →

Day 14:“Hello” Ruby on Rails

学习与开发 Ruby on Rails 应用的过程是在本地电脑上完成的。也就是你需要在本地电脑上创建 Rails 项目,运行它,然后学习或去做真正的开发。两种方法,一是可以直接在本地电脑上安装 Rails 项目的所有工具,然后直接在本地电脑上运行 Rails 项目。另外, 我们可以使用 Docker 去 Compose 一个 Rails 项目。

在本地直接运行 Rails 项目

需求

我在 macOS 上测试了整个过程。你需要:

  1. 安装 Ruby
  2. 安装 Xcode

安装 rails

打开终端,用 Ruby 的 Gem 去安装 Rails:

gem install rails

这会安装最新的 rails。你也可以指定安装具体的 Rails 版本,像这样:

gem install rails -v 5.0.0.1

如果你遇到错误:

Building native extensions. This could take a while...
ERROR: Error installing rails:
       ERROR: Failed to build gem native extension.

意思是不能构建本地扩展,Google 上面遇到的错误,找到网页:http://stackoverflow.com/questions/19580685/installing-rails-on-mavericks

解决的方法是执行:

xcode-select --install

上面的命令是安装了 Xcode 的 Command Line Developer Tools(开发者命令行工具)。完成以后再次执行:

gem install rails

安装过程需要一段时间,看到下面提示,说明成功的安装了 rails:

Successfully installed

创建 Rails 项目

rails new 命令可以创建新的 Rails 项目,执行:

cd ~/desktop
mkdir rails-app
cd rails-app

rails new .

先进入到桌面上,创建一个 rails-app 目录,进入这个目录,再用 rails new 在当前目录下创建一个 Rails 项目。

启动 Rails 项目

rails server 可以启动 Rails 项目。执行:

rails server

如果遇到错误:

getaddrinfo: nodename nor servname provided, or not known (SocketError)

默认服务器的端口号是 3000,如果你的本地电脑已经使用了 3000 这个端口就会遇到上面这个错误,解决的方法是在创建服务器的时候手工的指定一下新的端口号,像这样:

rails server -p 3300 -b '0.0.0.0'

这样你可以打开地址:

http://localhost:3300

你会看到 Rails 应用的欢迎界面。

48AA8CB6-CEDC-40B8-B2AE-B9BD7FBEDF2D

在本地用 Docker 运行 Rails 项目

这会是我最终选择的在本地运行 Rails 项目的方法。以后,我也会假设您选择的是这种方法。

需求

安装 docker for mac / docker for windows

目录结构

 → mkdir -p app services/rails/config
 → ls
app		services
 → touch docker-compose.yml services/rails/Dockerfile services/rails/config/Gemfile
 → tree
.
├── app
├── docker-compose.yml
└── services
    └── rails
        ├── Dockerfile
        └── config
            └── Gemfile

4 directories, 3 files

Compose

打开项目根目录下的 docker-compose.yml,定义几个服务:

version: '2'
services:
  rails:
    build:
      context: ./services/rails
      dockerfile: Dockerfile
    volumes:
      - ./app:/mnt/app
    ports:
      - "3000:3000"
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    tty: true
  db:
    image: mariadb:10.1
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "app"
      MYSQL_USER: "app"
      MYSQL_PASSWORD: "123123"
    volumes:
      - db:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    ports:
      - "8081:80"
    environment:
      PMA_HOST: "db"
      PMA_USER: "root"
      PMA_PASSWORD: "root"
volumes:
  db:
    driver: local

Gemfile

打开 services/rails/config/Gemfile 文件,输入内容:

source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

Dockerfile

打开 services/rails/dockerfile 文件,输入内容:

FROM ruby:2.3
MAINTAINER wanghao <wanghao@ninghao.net>

RUN apt-get update && apt-get install -y nodejs \
  && rm -rf /var/lib/apt/lists/*

RUN gem install rails --pre --no-ri --no-rdoc
RUN mkdir -p /mnt/app
WORKDIR /mnt/app
RUN rails new .
EXPOSE 3000

启动服务

运行 Docker,然后在项目的根目录下,执行:

docker-compose up -d

创建项目

在项目的根目录下,执行命令创建一个 rails 项目:

docker-compose run rails rails new .

新的项目文件会存储在 app 目录的下面。

再次启动

新创建了项目以后,再次执行:

docker-compose up -d

然后打开浏览器,输入地址:

http://localhost:3000

你会看到下面这个欢迎界面:

7917D846-21E0-4A4E-B784-A886334C4582

执行命令

在开发 Rails 应用的时候,你需要用到很多命令行工具,我们可以进入到 rails 服务的容器里,然后去执行需要的命令。进入到 rails 服务的容器:

docker-compose exec rails bash

hello,Rails

让 Rails 说出 “hello”,可以创建一个简单的控制器与视图。

用 controller 生产器,去创建一个名字是 Welcome 的控制器,里面有一个 index 动作:

rails generate controller Welcome index

结果像这样:

Running via Spring preloader in process 54
      create  app/controllers/welcome_controller.rb
       route  get 'welcome/index'
      invoke  erb
      create    app/views/welcome
      create    app/views/welcome/index.html.erb
      invoke  test_unit
      create    test/controllers/welcome_controller_test.rb
      invoke  helper
      create    app/helpers/welcome_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/welcome.coffee
      invoke    scss
      create      app/assets/stylesheets/welcome.scss

控制器:

app/controllers/welcome_controller.rb

视图:

app/views/welcome/index.html.erb

打开 index.html.erb 这个视图,删除里面的所有内容,添加下面的东西:

<h1>hello</h1>

访问地址:

http://localhost:3000/welcome/index

你会看到 “hello”

设置应用的首页

编辑文件:

config/routes.rb

内容如下:

Rails.application.routes.draw do
  get 'welcome/index'
  root 'welcome#index'
end

root 'welcome#index',意思是用 welcome 控制器的 index 动作来处理对应用首页的请求。

get 'welcome/index',意思是请求 welcome/index 这个地址的时候,用 welcome 控制器的 index 来处理。

E83D55D2-B724-428D-A3EB-33997E28B8A1

Ruby
微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点