Ruby on Rails网站项目构建简单指南
创建Rails项目时,使用--skip-bundle跳过依赖自动安装,随后修改Gemfile源为国内镜像再执行bundleinstall。时区配置:在config/application.rb中设置config.time_zone='Beijing'和config.active_record.default_timezone=:local。切换MySQL需在
在开始一个 Rails 项目之前,很多人会先纠结一个问题:怎么搭建?其实步骤并不复杂,但国内开发者往往会卡在第一步——网络环境。下面就把整个流程拆开来讲,希望能帮你少走些弯路。
创建 Rails 项目

创建一个普通的 Rails 项目,直接用以下命令即可:
rails new blog
但问题来了——在国内连接 RubyGems 的速度实在让人抓狂。Rails 默认在项目骨架生成后,会用 bundle 从 RubyGems 下载依赖包,结果经常卡死。所以第一件事就是绕过它:加上 --skip-bundle 参数,先跳过这一步。后续咱再用国内的镜像源来装包。目前国内比较靠谱的是 Ruby China 提供的源:https://gems.ruby-china.org/。
实际操作步骤整理如下:
- 创建项目(跳过 bundle)
rails new blog --skip-bundle
- 修改项目目录里的
Gemfile文件,把第一行source后面引号里的地址换成https://gems.ruby-china.org/。 - 在项目目录下执行
bundle install,完成依赖安装。
到此为止,一个标准的 Rails 项目骨架就搭好了。
配置 Rails 项目
骨架虽然能用,但实际开发多少得按需求调调配置。比如时区、数据库这些,默认值往往不是我们想要的。
设置时区
Rails 默认用 UTC 时区。如果项目只在国内跑,那所有时间数据都会比北京时间晚 8 个小时——显然不合适。所以除非是国际性项目,否则建议把时区改到国内。
打开 config/application.rb,找到 config.time_zone 配置项,去掉注释,把值改成 Beijing,再额外加一行:
config.active_record.default_timezone = :local
这样 Rails 在读写数据库时也会使用本地时间,一劳永逸。
使用 MySQL
默认用的是 SQLite,如果你要切到 MySQL,得先装好 MySQL 的程序包,然后改数据库配置。
先打开 Gemfile,添加一个全局依赖:
gem 'mysql2'
然后 bundle install 把包装上。
接着打开 config/database.yml,把 development 区块改成类似下面的样子:
development: adapter: mysql2 database: blog username: root password: host: 127.0.0.1
密码根据实际情况填写,其他环境(test、production)也类似处理。
创建 Rails 文档
对于老手来说,这一步可能可有可无;但新手(比如当年的我)经常会翻手册找方法,网速不好或者离线的时候就特别头疼。Rails 提供了在项目里生成本地文档和 API 文档的命令,把资料搬到本地,用起来方便多了。
首先需要加一个依赖包:redcarpet。因为它只在本地开发时用,所以不用放到全局依赖。找到 Gemfile 底部的 development 配置块,加进去:
gem 'redcarpet', '~> 3.1.2'
然后 bundle install 安装。
接着执行下面两条命令:
rake doc:guides rake doc:rails
文档会自动生成到 doc 目录,之后直接本地浏览器打开就能查阅。
在 Rails 中创建自定义命令
开发 Web 应用时,经常需要在终端跑一些脚本来处理特定任务,比如从一个大文件里导入数据。Rails 解决这个问题非常轻量,下面举个简单的例子。
在 lib/tasks 目录下新建一个 hello.rake 文件,内容如下:
namespace :hello do task :world do puts "Hello, World!" end end
这样就定义了一个打招呼的任务。运行它只要用 rake 命令:
rake hello:world
不过默认情况下,这个脚本没法直接访问项目里的模型、数据库那些东西。如果想让脚本能调用项目里的模块也很简单——加上 => :environment 就行。比如我想给所有客户打个招呼:
namespace :hello do
# ...
task :customers => :environment do
for customer in Customer.all
puts sprintf("hello, %s", customer.name)
end
end
end
如果你的项目里正好有 Customer 模型,而且它有 name 字段,那直接执行 rake hello:customers 就能看到效果。对比第一个任务,其实就是多了 => :environment 这串代码——它负责把整个 Rails 环境加载进来。是不是很简单?


































