发布于 

Ruby on Rails 实践:创建 aloe 项目

在看正文之前,说一个发生的真实案例。

产品的业务后端是 PHP 写的,而其他一些基础服务是 C++ 开发的。不幸的是产品线上出了一个事故,原因是 PHP 写的一个 API 响应速度过慢,导致整个客户端卡顿,客户端同事抱怨服务端写的 API 垃圾,C++ 同事鄙视 PHP 的同事,C++ 同事现场撸了这个 API 并进行了严格的测试,结论是这个 API 如果用 C++ 写不用 5 毫秒就可以响应任何客户端的请求。一时间项目组陷入了深度怀疑 PHP 的漩涡之中,仿佛罪魁祸首就是那帮写 PHP 的人一样。最后复盘总结发现原来是业务后端架构设计不合理导致的跟编程语言没有半毛钱关系。

编程语言之间确实存在一定的鄙视链,选择哪种编程语言要提前做好规划,综合现有的业务场景、人才储备来考虑,能解决当下问题才是王道。Ruby 不是最好的,但它能解决我遇到的问题,我知道我目前需要它。

简介

本次课程主要跟大家分享一下,如何使用 rails 命令创建工程,同时可以了解到:

  • rails 工程目录以及作用

  • 配置和修改 gem 源

创建项目

使用 rails 创建项目的命令如下

1
rails new APP_PATH [options]

在创建项目之前,检查一下是否已经安装了 sqlite3 这个数据库,没有的话请查阅资料自行安装一下。

检查方法

1
sqlite3 --version

指定 rails 版本创建项目,选项 --skip-bundle 是为了跳过安装 gems,后面会详细说。

1
rails _7.0.3.1_ new ~/work/aloe --skip-bundle

不到 2s 的时间,会在你的 ~/work 目录下有个名为 aloe 的文件夹,它就是我们创建的项目目录。

工程目录介绍

下表列出了对应文件夹包含的内容以及作用,便于大家查阅。

序号 文件/文件夹 作用
1 app/ 包含应用的(MVC)控制器、模型、视图、辅助方法、邮件程序、频道、作业和静态资源文件。这个文件夹跟我们日常开发关系最大
2 bin/ 包含用于启动应用的 rails 脚本,以及用于安装、更新、部署或运行应用的其他脚本
3 config/ 配置应用的路由、数据库等。
4 config.ru 基于 Rack 的服务器所需的 Rack 配置,用于启动应用
5 db/ 包含当前数据库的模式,以及数据库迁移文件
6 Gemfile, Gemfile.lock 这两个文件用于指定 Rails 应用所需的 gem 依赖。Bundler gem 需要用到这两个文件
7 lib/ 应用的扩展模块
8 log/ 应用日志文件
9 public/ 仅有的可以直接从外部访问的文件夹,包含静态文件和编译后的静态资源文件
10 Rakefile 定位并加载可在命令行中执行的任务。这些任务在 Rails 的各个组件中定义。如果要添加自定义任务,请不要修改 Rakefile,直接把自定义任务保存在 lib/tasks 文件夹中即可
11 README.md 应用的自述文件,说明应用的用途、安装方法等
12 storage 磁盘服务的活动存储文件。跟 Active Storage 有关,后面用到再说
13 test/ 单元测试、固件和其他测试装置。详情请参阅Rails 应用测试指南
14 tmp/ 临时文件(如缓存和 PID 文件)
15 vendor/ 包含第三方代码如第三方 gem,在生产环境我们可以直接把 gems 放到这里
16 .gitignore 告诉 Git 要忽略的文件(或模式)
17 .ruby-version 记录工程使用的 ruby 版本

运行项目

更改 gem 源,修改 Gemfile 修改完成后,保存。

1
2
# source "https://rubygems.org"
source "https://gems.ruby-china.com"

运行项目,执行

1
2
3
4
5
# 安装 gems
bundle install

# 运行项目
rails s

在浏览器访问 http://127.0.0.1:3000 就可以看到对应的页面。

这里补充一个小知识点,rails srails server 命令的简写。关于它的用法还有很多,随着大家的深入学习也会逐渐接触到的。

Usage:

rails server -u [thin/puma/webrick] [options]

Options:

-e, [–environment=ENVIRONMENT] # Specifies the environment to run this server under (test/development/production).

-p, [–port=port] # Runs Rails on the specified port - defaults to 3000.

-b, [–binding=IP] # Binds Rails to the specified IP - defaults to ‘localhost’ in development and ‘0.0.0.0’ in other environments’.

-c, [–config=file] # Uses a custom rackup configuration.

​ # Default: config.ru

-d, [–daemon], [–no-daemon] # Runs server as a Daemon.

-u, [–using=name] # Specifies the Rack server used to run the application (thin/puma/webrick).

-P, [–pid=PID] # Specifies the PID file - defaults to tmp/pids/server.pid.

-C, [–dev-caching], [–no-dev-caching] # Specifies whether to perform caching in development.

​ [–early-hints], [–no-early-hints] # Enables HTTP/2 early hints.

​ [–log-to-stdout], [–no-log-to-stdout] # Whether to log to stdout. Enabled by default in development when not daemonized.

参考资料


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。