发布于 2026-01-06 0 阅读
0

构建 Rails 应用。第一部分:安装、设置和部署 简介 安装 设置 部署

构建 Rails 应用。第一部分:安装、设置和部署

介绍

安装

设置

部署

介绍

在本系列文章中,我们将一步一步地创建一个功能齐全的 Web 应用程序,以此来学习 Ruby on Rails。我一直觉得,在学习新知识的同时,动手做一些“实际”的东西会更有帮助。本系列文章的目标正是如此:帮助我(以及最终阅读本文的你)更快更好地学习 Rails。既然我们已经了解了我尝试这样做的原因,那么问题来了:我们要创建什么呢?

我决定做一个网店。这个应用会卖运动鞋。之前我用不同的技术栈也做过类似的东西,但最终错失了良机。这次纯粹是为了学习如何使用 Rails。让我们马上开始吧!

安装

在开始编写代码之前,我们需要确保所有工具都已准备就绪。首先,我们需要三样东西:Ruby(Rails框架背后的语言)、Rails(这还用说吗……)和git(用于部署我们的应用程序并跟踪我们的更改)。

如果您已经拥有这些工具,则可以跳过此步骤,直接进入“设置”部分。

安装 Ruby

视窗

Windows 用户可以访问以下链接。点击下载按钮,然后选择“WITH DEVKIT”下的第一个链接。下载后,按照步骤操作,然后打开终端窗口检查您的 Ruby 版本:

>ruby -v
ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
Enter fullscreen mode Exit fullscreen mode

macOS

在 macOS 上,根据你的系统版本,你可能已经安装了 Ruby。在终端中使用 `sudo apt-get` 命令检查ruby -v。如果没有,请安装Homebrewbrew install ruby在终端中运行 `npm install`。之后,运行 `npm install` ruby -v,你应该会看到类似这样的输出:

>ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
Enter fullscreen mode Exit fullscreen mode

安装 Rails

现在我们已经安装了 Ruby,接下来需要安装 Rails 框架。在 Ruby 中,我们称包为gem。要安装 gem,可以使用命令`gem install [packageName]` 。gem 命令由包管理器RubyGems提供。所以,在本例中,打开终端窗口并运行:`gem install rails`。和之前安装 Ruby 一样,你可以通过检查 Rails 的版本来确认它是否已安装:

rails -v
Rails 5.2.1
Enter fullscreen mode Exit fullscreen mode

注:本系列文章的其余部分将使用此 Rails 版本

安装 Git

最后,我们需要安装Git。Git是一款流行的版本控制系统 (VCS)。版本控制系统使与他人协作、共享和备份代码变得轻松便捷。

在 Windows 系统上

Windows 用户可以从这个页面下载 Git 。按照默认设置安装并按照步骤操作,一切应该就没问题了。之后,git在终端运行命令,你应该会看到类似这样的输出:

  >git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
Enter fullscreen mode Exit fullscreen mode

在 macOS 上

在 macOS 上,我们可以使用Homebrew安装 Git。我们已经安装过 Git 了,因为安装 Ruby 需要用到它。所以,我们可以运行命令来安装版本控制系统 (VCS)。在终端命令中brew install git运行后,你应该会看到与上面相同的文本。git

设置

现在我们已经拥有了所有需要的工具,可以开始搭建新的应用程序了。在本节中,我们将创建一个全新的 Rails 裸机应用程序,并快速了解一下有哪些功能。要创建一个新的 Rails 应用程序,我们使用 `rails app`rails new myAppName命令。因此,请切换到您想要创建应用程序的目录并运行 `rails app` rails new sneakers_store。创建完一系列新文件后,您应该会看到类似以下内容:

  Bundle complete! 16 Gemfile dependencies, 77 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Enter fullscreen mode Exit fullscreen mode

现在,你可以进入 Rails 应用程序目录,cd sneakers_store并在你喜欢的编辑器中打开它来一探究竟!

探索应用程序

正如你所见,这里有很多文件和文件夹。我们现在不会逐一详细介绍,因为没有必要。以后需要的时候再处理。但你已经有了一个可以运行的应用程序(虽然目前功能还不多)。让我们来看看其中的一些文件和文件夹:

Gemfile

在这个应用程序中,你会找到一个名为Gemfile 的文件。如果你熟悉 JavaScript,它类似于 package.json 文件。它列出了此应用程序所需的包。正如你所看到的,我们的小应用程序已经需要不少gem。你会注意到文件中有一个特殊的运算符~>。它告诉打包工具(负责加载所需的 gem)可以加载哪些 gem 版本。例如,我有:

gem 'rails', '~> 5.2.1'

这意味着我的应用可以使用 Rails 版本高于 5.2.1 但低于 5.3.0 的版本。基本上,它只会收到此 gem 的次要补丁。如果您需要确切的版本号,可以删除~>

app/ 目录

应用程序目录包含核心应用程序代码:模型、视图、控制器和辅助函数。该目录下还有一个assets/文件夹,其中包含应用程序的资源文件,例如 CSS、图像或 JavaScript 文件。

config/ 目录

config目录包含应用程序配置。例如您可以在这里找到我们的路由器配置。

测试/目录

不出所料,这里将编写我们应用程序的测试。

捆绑器

Bundler是管理应用程序 gem 的工具。之前我解释过,Gemfile 中的`~>`语法用于指定应用程序允许使用的 gem 版本。Bundler 负责管理这些依赖项以确保开发环境的稳定性。Bundler会安装应用程序运行所需的精确 gem 版本。

当你运行`rails new`命令时,该命令bundle install会自动运行。每次你修改 Gemfile 文件(例如添加新的 gem、更改 gem 的版本)时,务必运行该命令bundle install以使更改生效。

为了方便讨论,假设我希望我的 Rails 版本是5.2.1,不需要任何小版本更新。因此,我将替换 Gemfile 中的以下代码行:

gem 'rails', '~> 5.2.1'

经过:

gem 'rails', '5.2.1'

去掉~>表示您希望 gem 具有确切的版本。您可能还会遇到以下语法:gem 'rails', '>= 5.2.1'.

>=表示:获取该 gem 的最新版本,只要该版本大于或等于提供的版本号。在本例中,我们要求 bundle 获取最新的 rails gem 版本,只要该 gem 版本大于或等于 5.2.1。

现在,运行该命令。Bundlebundle install在必要时安装新的 gem 包和/或更新 gem 包。系统可能会提示您先运行该命令。如果是这种情况,请先运行该命令bundle updatebundle updatebundle install

所以,每当我们修改 Gemfile 文件时,请务必运行bundle install

rails服务器

因为我们运行了 `npm run dev` rails new,所以我们已经有了一个可以运行的应用程序。我们使用 `npm run dev` 来运行一个 Rails 应用程序rails server。你的终端应该会显示类似这样的信息:

 > rails server
=> Booting Puma
=> Rails 5.2.1 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.1-p57), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
Enter fullscreen mode Exit fullscreen mode

太棒了!您的应用程序现在正在 3000 端口运行。如果您在浏览器中访问http://localhost:3000 ,您将看到:

太棒了,一切准备就绪,我们可以开始编码了。不过在此之前,我们先来了解一些 Rails 的理论基础,以便更好地理解它。

MVC的故事

Rails框架遵循模型-视图-控制器(MVC)架构模式。模型负责应用程序的数据和逻辑。模型代表应用程序运行的“世界”。例如,它定义用户信息,或更新数据库。视图你在浏览器中看到的内容。视图使用模型并显示界面。最后,控制器充当视图和模型之间的中介。它处理用户操作,并修改模型和视图中的数据。

当你访问 localhost:3000 时,会发送一个请求。该请求会被发送到控制器。根据编写的代码,控制器可能会立即渲染一个视图,或者与模型进行交互。例如,在与模型交互后(例如从数据库中获取数据),控制器会使用获取到的数据渲染视图。

这就需要一个非常简单的示意图:

如您所见,控制器位于整个系统的中心。如果您查看 app/ 文件夹,就会发现三种模块类型(controllers/、models/ 和 views/)之间的区别。接下来,我们来创建第一个控制器。

我们的第一个控制器

为了遵循我们民族的古老传统,我们必须创建一个应用程序,并在某个时候显示“Hello World!”。让我们开始吧。在 controllers 文件夹中,创建一个名为firstcontroller_controller.rb的新文件。然后,将以下代码放入其中:

class WelcomeController < ApplicationController
    protect_from_forgery with: :exception

    def greeting
        render html: "Hello World!"
    end
end

Enter fullscreen mode Exit fullscreen mode

注意:控制器文件名应以_controllers.rb结尾,类名应以Controller结尾。

现在不用太担心语法。我们创建了一个名为 WelcomeController 的类,它继承自 ApplicationController。在控制器中,你可以定义 action。action 是控制器上的一个公共方法,Web 服务器可以自动访问它。这里,我创建了一个名为greeting的 action 。因为 Ruby 的语法很像英语,你可以猜到这个 action 的作用:它会渲染一些 HTML 代码:“Hello World!”。但这还不足以将我们的 HTML 字符串渲染到视图中。为此,我们需要修改路由。

修改路由器

路由器配置位于config/routes.rb 文件中。打开该文件,并将文件内容替换为以下内容:

Rails.application.routes.draw do
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    root "welcome#greeting"
end
Enter fullscreen mode Exit fullscreen mode

我们希望确保根路由使用我们新的控制器。如果您点击上面的链接,可以看到配置根路由的文档。语法如下:

root controller_name#action_name

我们的控制器名称是welcome,操作名称是greeting。保存文件并刷新浏览器:

太棒了!这是个好的开始。现在,让我们部署应用程序吧!

部署

首先,我们需要创建 Git 仓库。导航到 sneakers_store 目录的根目录并运行命令git init。你应该会看到类似这样的输出:

 ➜  sneakers_store git:(master) ✗ git init
Reinitialized existing Git repository in /Users/Damien/Desktop/ruby/sneakers_store/.git/
Enter fullscreen mode Exit fullscreen mode

现在,运行git add .以下git commit -m 'first commit'命令。第一个命令会将所有当前文件添加到您的存储库并放置在暂存区。这基本上是待处理的更改,第二个命令表明我们确定要保留这些更改,因此我们提交它们,并附带一条消息。

我们将使用 Heroku 部署我们的应用程序。这一步是可选的,但我发现尽早且频繁地部署会更容易。

Heroku 设置

Heroku 使用 PostgresQL 数据库。这意味着我们不能继续使用目前默认的 sqlite3 数据库。因此,我们需要修改 Gemfile 文件。修改后的 Gemfile 文件应该如下所示:

 source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.1'
# Use Puma as the app server
gem 'puma', '~> 3.11'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false

group :development, :test do
    gem 'sqlite3'
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of chromedriver to run system tests with Chrome
  gem 'chromedriver-helper'
end

group :production do
 gem 'pg'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Enter fullscreen mode Exit fullscreen mode

请注意,我们已将 sqlite3 gem 从第一个列表中移除,以便将其包含在:development 和 :test 组中。pg gem 用于 PostgresQL)包含在:production 组中。Rails 允许您为不同的环境指定所需的 gem。第一个列表是每个环境中始终加载的 gem。

现在,由于我们修改了 Gemfile 文件,需要再次运行 Bundle 命令。但是,这次我们将添加一个标志,以防止在本地环境中安装生产环境的 gems:

bundle install --without production

这样不会安装pg gem。

让我们重新运行git add .。然后运行git commit -m 'Updated Gemfile for production'

Heroku CLI

现在,您可以注册Heroku 账号。接下来,下载Heroku CLI。下载完成后,heroku --version在终端中运行命令检查 Heroku 是否已安装。

  ➜  sneakers_store git:(master) ✗ heroku --version
heroku/7.0.52 darwin-x64 node-v10.1.0
Enter fullscreen mode Exit fullscreen mode

接下来,运行heroku login并输入您的凭据。然后,运行heroku keys:add

现在,我们可以通过运行以下命令在 Heroku 上为我们的应用程序创建一个位置heroku create

  ➜  sneakers_store git:(master) ✗ heroku create
Creating app... done, ⬢ aqueous-peak-82306
https://aqueous-peak-82306.herokuapp.com/ | https://git.heroku.com/aqueous-peak-82306.git
Enter fullscreen mode Exit fullscreen mode

这是专门用于您的应用程序的子域名。当然,它的名称会和我的不一样。

在 Heroku 上部署

要在 Heroku 上部署,请运行命令git push heroku master。您会在终端中看到很多信息。完成后,您可以访问 Heroku 帐户控制面板,查看应用程序的子域名。点击该子域名,然后点击右上角的“打开应用” 。您将看到以下内容:

恭喜!你刚刚在 Heroku 上部署了你的第一个 Rails 应用程序,并且学会了如何创建你的第一个控制器!

文章来源:https://dev.to/damcosset/building-a-rails-app-part-1-installation-setup-and-deploy-g52