三号床

发表在 无聊图 | 留下评论

Ruby on Rails 教材中文译文 第一章 从零到部署

每章前言

欢迎使用Ruby on Rails教程
使用Rails学习Web开发
本书的目的是教你如何开发自定义Web应用程序
我们选择的工具是流行的Ruby on Rails Web框架
除了专注于Web开发的一般原则
而不是专门针对Rails之外
Ruby on Rails教程还教授了更普遍的自学技能(方框1.1)

如何自学
Ruby on Rails教程是Learn Enough to Be Dangerous系列教程的一部分
它提出了培养大家的自学能力
即硬技能和软技能的结合
使你看起来可以神奇地解决任何技术问题(图1.1)
Web开发和计算机编程通常都需要自学
但除此之外还有更多
您还必须知道如何单击菜单项
以了解特定应用程序的功能
如何澄清混淆错误信息并用谷歌搜索
以及什么时候该放弃研究
重新开始
Web应用程序具有如此多的可变性
因此它们提供了大量的机会来
练习大家的自学能力
在Rails Web开发的学习过程中
适合练习自学的一些具体示例包括
确保您使用正确的Ruby gem版本
运行bundle install或bundle update
以及如果某些东西不起作用则重新启动本地Web服务器
如果所有这些听起来像是胡言乱语
请不要担心
我们将在完成本教程的过程中
涵盖此处提到的所有内容当您继续学习本教程时
很可能偶尔会因为没有按预期运行的东西而被卡住
虽然文中明确强调了一些可能会出现问题的特别棘手的问题的解决方法
但人不可能预见到所有可能出错的事情
我建议你把这些不可避免的拦路虎
作为改善自学能力的机会
或者
正如我们在极客大会中所说的那样
这不是一个错误
这是一个功能

方框1.1


图1.1
这是由Learn Enough to Be Dangerous教程开发的主题
Learn Enough入门包含一系列教程
这些教程适合作为Ruby on Rails教程的先决条件
比如彻底面向初学者的命令提示符

Ruby on Rails教程
旨在为您提供Web应用程序开发的全面介绍
包括Ruby,Rails,HTML和CSS
数据库,版本控制,测试和部署
的基础知识
足以让您成为合格的
网络开发人员或技术企业家
如果您已经了解Web开发
本书将快速向您介绍
Rails框架的基本知识
包括MVC和REST,生成器
迁移,路由和嵌入式Ruby
无论如何
当您完成Ruby on Rails教程时
您将能够从更多高级的
书籍,博客和屏幕录像中受益
而这些书籍,博客和屏幕录像
是蓬勃发展的编程教育生态系统的一部分

Ruby on Rails教程采用了一种集成的Web开发方法
构建了三个复杂性递增的示例应用程序
从最小的hello_app(第1.3节)开始
到一个稍微复杂的toy_app(第2章)
和一个真正的sample_app(第 3至第14章)
正如其名称所暗示的
Ruby on Rails教程中开发的应用程序
并非特定于任何特定类型的网站
最终的sample_app不仅仅与Twitter有相似之处
(巧合的是,Twitter最初也是用Rails编写的)
整个教程的重点是基于普适性原则
因此无论以后你想建立何种类型的Web应用程序
都将拥有坚实的基础

在第一章中
我们将通过安装所有必需的软件
并设置我们的开发环境(第1.2节)
从而开始使用Ruby on Rails
然后我们将创建第一个
名为hello_app的Rails应用程序
Rails教程强调了良好的软件开发实践
因此在创建新的Rails项目之后
我们将使用Git将其置于版本控制之下(第1.4节)
而且,不管你信不信
在本章中
我们甚至会将我们的第一个应用程序
部署到更广泛的网络上
(将其部署到生产环境中)(第1.5节)

在第二章中
我们将创建第二个项目
其目的是演示Rails应用程序的基本工作方式
为了快速启动和运行
我们将使用Scaffolding(方框1.2)
来构建这个玩具应用程序
(称为toy_app)并且生成代码
因为这段代码既丑陋又复杂
第二章将重点介绍
如何使用网页浏览器通过URI
(通常称为URL)与toy_app进行交互

本教程的其余部分
重点介绍如何开发一个大型实际示例应用程序
称为sample_app
从头开始编写所有代码
我们将使用模型,测试驱动开发(TDD)
和集成测试的组合开发示例应用程序
我们将在第3章开始创建静态页面
然后添加一些动态内容
我们将在第4章中快速介绍一下Rails的Ruby语言
然后,在第5章到第12章中
我们将通过制作站点布局
用户数据模型以及完整的注册和身份验证系统
包括帐户激活和密码重置
来完成示例应用程序的基础
最后,在第13章和第14章中
我们将添加微博和社交功能
以制作一个有效的sample_app

Scaffolding:更快,更容易,更诱人
从一开始
Rails就明显让人感到兴奋
从Rails创作者
David Heinemeier Hansson着名的15分钟博客视频开始
该视频及其改版是了解Rails功能的好方法
我建议观看它们
但要注意的是
他们使用一个名为Scaffolding的功能
完成了他们惊人的十五分钟的壮举
Scaffolding很大程度上依赖于自动生成的代码
由Rails生成Scaffolding命令神奇地创建在编写Ruby on Rails教程时
很容易依赖Scaffolding方法
它更快,更容易,更诱人
但是Scaffolding中的复杂性和大量代码
对于Rails开发人员来说
可能是完全无法应对的
你可以使用它
但你可能不会理解它
遵循Scaffolding方法可能会让您
变成一个对Rails有很少(且脆弱)了解的
大师级别的脚本生成器在Ruby on Rails教程中
我们将采用(几乎)极端相反的方法
虽然第二章将使用Scaffolding
开发一个小玩具应用程序
但Rails教程的核心是sample_app
我们将在第三章开始编写
在开发sample_app的每个阶段
我们将编写一些小的
简单的代码 – 简单到足以理解
但又足够新颖
具有挑战性
累积效果将是对Rails更深入
更灵活的知识
为您编写几乎任何类型的Web应用程序提供了良好的背景

方框1.2

1.1 简介
Ruby on Rails(或简称“Rails”)
是一个用Ruby编程语言编写的Web开发框架
自2004年首次亮相以来
Ruby on Rails已迅速成为
构建动态Web应用程序的
最强大和最受欢迎的工具之一
Rails被Airbnb,Basecamp,Disney
GitHub,Hulu,Kickstarter,Shopify
Twitter和Yellow Pages等公司使用
还有许多专门研究Rails的网站开发商店
如ENTP,thinkbot,Pivotal Labs
Hashrocket和HappyFunCorp
以及无数的独立顾问,培训师和承包商

是什么让Rails如此出色?
首先,Ruby on Rails是100%开源的
可以在MIT许可下使用
下载或使用也无需任何费用
Rails的优势还在于它优雅而紧凑的设计
通过利用底层Ruby语言的可塑性
Rails有效地创建了一种
特定于域的语言来编写Web应用程序
因此,许多常见的Web编程任务
如生成HTML,制作数据模型和路由URL
都很容易使用Rails
并且生成的应用程序代码简洁易读

Rails还可以快速适应
Web技术和框架设计的新发展
例如,Rails是第一个完全消化和实现
用于构建Web应用程序的
REST架构风格的框架之一(我们将在本教程中学习)
当其他框架开发成功的新技术时
Rails创建者David Heinemeier Hansson
和Rails核心团队
毫不犹豫地将他们的想法融入其中
也许最引人注目的例子是
Rails和Merb(一个竞争对手的Ruby Web框架)的合并
因此Rails现在可以从Merb的模块化设计、
稳定的API和改进的性能中受益

最后
Rails受益于其有一个异常热情和互助的社区
里面包括成千上万的开源贡献者、
有趣和信息丰富的会议、
大量的Gems(针对特定问题的独立解决方案,如分页和图像上传)、
丰富多样的信息博客、
以及丰富的讨论论坛和IRC频道
大量Rails程序员的存在也使得处理不可避免的应用程序错误变得更容易
只要搜索错误消息几乎总能找到相关的博客文章或论坛帖子

1.1.1 先决条件
本书没有正式的先决条件
Ruby on Rails教程不仅包含Rails的基本教程
还包含底层Ruby语言
默认的Rails测试框架(minitest)
Unix命令行,HTML,CSS
少量的JavaScript,甚至一点点SQL
信息量好像有点大
我通常建议在开始本教程之前
有一些HTML和编程背景
如果您是软件开发的新手
我建议您从Learn Enough to Be Dangerous系列教程开始:

开发人员基础知识
Learn Enough Command Line to Be Dangerous
Learn Enough Text Editor to Be Dangerous
Learn Enough Git to Be Dangerous
网络基础知识
Learn Enough HTML to Be Dangerous
Learn Enough CSS & Layout to Be Dangerous
开发者入门
Learn Enough JavaScript to Be Dangerous
Learn Enough Ruby to Be Dangerous
应用程序开发
The Ruby on Rails Tutorial

学习Rails时的一个常见问题就是
是否首先学习Ruby
答案取决于您的个人学习风格
以及您已有的编程经验
如果您希望从头开始系统地学习所有内容
或者之前从未编程过
那么首先学习Ruby可能对您有用
在这种情况下
我建议您遵循上面列出的完整学习足够序列
另一方面
许多初学Rails开发人员
对制作Web应用程序感到兴奋
并且宁愿在不会编写单个网页的前提下
完成关于Ruby的整本书
这时候我一般建议先看一下前面的Learn Enough系列
不然直接开始本教程将会很有挑战性

在本教程结束时
无论您从哪里开始
您都应该为更多中级到高级的Rails资源做好准备
以下是我特别推荐的一些内容:
1. The Learn Enough社区
本教程的增强版
包括书中没有的15小时视频教程和隐藏技能
2. 图灵软件与设计学院
在科罗拉多州丹佛市举办为期27周的全日制培训课程
3. Bloc
具有结构化的课程
个性化的指导
并专注于通过具体项目学习
使用优惠码BLOCLOVESHARTL可获得500美元的报名费减免
4. Launch School
一个很好的在线Rails开发训练营(包括高级材料)
5. Firehose Project
一个由导师驱动的在线编码训练营
专注于实际编程技能
如测试驱动开发,算法
以及构建高级Web应用程序
提供为期两周的免费介绍课程
6. Thinkful
安排您与专业工程师一一配对的在线课程
7. Pragmatic Studio
来自Mike和Nicole Clark的在线Ruby和Rails课程
与编程Ruby作者Dave Thomas一起
迈克教授是我的Rails启蒙老师
8. RailsApps
各种详细的特定于主题的Rails项目和教程
9. Rails Guides
各种最新的Rails指南和参考

练习
Ruby on Rails教程包含大量练习
强烈建议您在完成本教程时解决这些问题

为了区分主要课程与练习
解决方案通常不会包含在后续的代码清单中
当然在极少数情况下
练习的解决方案
会在正文中明确指出
这意味着随着时间的推移
由于练习答案中细微的差异
您的代码可能会偏离教程中显示的代码
学习如何解决这些差异
也是磨练自学能力的一项有价值的练习

要记录您的答案并查看解决方案
您可以加入Learn Enough Society
这是一个来自Learn Enough to Be Dangerous的订阅服务
其中包括Ruby on Rails教程的特殊增强版本

许多练习都很有挑战性
但我们会从一些简单的练习开始
以便热身:
比如哪个网站托管Ruby on Rails的Ruby gem?
提示:如果有疑问,谷歌吧
Rails的当前版本号是多少?
到目前为止,已经下载了多少次Ruby on Rails?

1.1.2 本书惯例
本书中使用的约定大多是不言自明的
在本节中
我们将介绍一些特例
本书中的许多示例都使用命令行命令
为简单起见
所有命令行示例都使用Unix样式的命令行提示符(美元符号)
如下所示:

$ echo “hello, world”
hello, world

Rails附带了许多可以在命令行运行的命令。
例如,在1.3.2节中
我们将使用rails server命令运行本地开发Web服务器

$ rails server

与命令行提示一样
Rails教程对目录分隔符使用Unix约定
即正斜杠/
例如,sample_app的production.rb配置文件如下所示:

config/environments/production.rb

应将此文件路径理解为相对于应用程序的根目录
该目录因系统而异
比如在云IDE(第1.2.1节)上
它看起来像这样:

/home/ec2-user/environment/sample_app/

也因此
他的完整路径应该是

/home/ec2-user/environment/sample_app/config/environments/production.rb

我通常会省略应用程序路径
并简称为config/environments/production.rb

Rails教程经常显示各种程序的输出
由于不同计算机系统之间存在无数的微小差异
您看到的输出可能并不总是与文本中显示的内容完全一致
但这并不值得关注
此外,某些命令可能会产生错误
具体取决于您的系统
我将利用“搜索错误信息”的方法
而不是尝试记录本教程中所有此类错误
这才是现实中一个优秀软件开发者应有的素养
如果您在学习本教程时遇到任何问题
我建议您参考Rails教程帮助页面中列出的资源

由于Rails教程涵盖了Rails应用程序的测试
因此了解特定代码段是否导致测试套件失败(由红色表示)
或通过(由绿色表示)通常很有帮助。
为方便起见
导致测试失败的代码因此用红色表示
而导致通过测试的代码用绿色表示

最后,为方便起见
Ruby on Rails Tutorial采用了两种惯例
旨在使许多代码示例更易于理解
首先,一些代码清单包括一个或多个突出显示的行
如下所示:

class User < ApplicationRecord
validates :name, presence: true
validates :email, presence: true
end

这些突出显示的行
通常表示给定样本中最重要的新代码
并且通常(但并非总是)表示当前代码列表
与先前列表之间的差异
其次,为了简洁和简洁
本书的许多代码清单包括垂直点
如下所示:

class User < ApplicationRecord . . . has_secure_password end

这些点代表省略的代码
不应按字面复制

1.2 启动并运行
即使是经验丰富的Rails开发人员
安装Ruby,Rails以及所有相关的支持软件
也可能令人沮丧
使问题更加复杂的是环境的多样性
不同的操作系统,版本号
文本编辑器和集成开发环境(IDE)中的首选项等
Ruby on Rails教程为此问题提供了两种推荐的解决方案
一种可能性是遵循1.1.1节中提到的
完整的Learn Enough intro序列
这将间接是你拥有学习需要的系统

建议新用户使用的另一种可能性是
通过使用云集成开发环境或云IDE来回避此类安装和配置问题
本教程中使用的云IDE可以在普通Web浏览器中运行
因此在不同平台上的工作方式相同
这对于Rails开发历史上很困难的操作系统(如Windows)尤其有用
它还可以维护您当前的工作状态
因此您可以暂停教程
并且随时返回系统继续学习

1.2.1 开发环境
考虑到各种特殊的自定义
可能有与Rails程序员一样多的开发环境
为了避免这种复杂性
Ruby on Rails教程标准化了优秀的云开发环境Cloud9
它是Amazon Web Services(AWS)的一部分
生成的工作区环境预先配置了专业级Rails开发所需的大部分软件
包括Ruby,RubyGems,Git
事实上
我们将单独安装的唯一大部分软件是Rails本身
而这是故意的(第1.2.2节)

虽然欢迎您在本地开发应用程序
但是设置Rails开发环境可能具有挑战性
因此我建议大多数读者使用云IDE
对于那些想要去本地开发的人来说
可以尝试Learn Enough to Be Dangerous
并为自学挑战性练习做好准备

云IDE包括开发Web应用程序所需的三个基本组件
文本编辑器,文件系统导航器和命令行终端(图1.2)
除了其他功能之外
云IDE文本编辑器还支持“在文件中查找”全局搜索
我认为这对于导航任何大型Ruby或Rails项目至关重要
最后,即使您决定不在现实生活中专门使用云IDE
当然也建议学习其他工具
我们依然提供了对文本编辑器和其他开发工具的一般功能的出色介绍

图1.2

以下是开始使用云开发环境Cloud9的步骤
Cloud9是Amazon Web Services(AWS)的一部分
因此如果您已拥有AWS账户
则只需登录即可
要创建新的Cloud9工作区环境
请转至AWS控制台并在搜索框中键入“Cloud9”
如果您还没有AWS账户
则应在AWS Cloud9注册免费账户
为了防止滥用
AWS需要有效的信用卡才能注册
但工作区是100%免费的(一年)
至少在撰写本文时免费
您的卡将不收取费用
但您可能需要等待最多24小时才能激活帐户
我注册的时候
大约十分钟就激活了
一旦您成功进入Cloud9管理页面(图1.3)

图1.3
请继续单击“创建环境”
直到您发现自己处于如图1.4所示的页面上

图1.4
输入如图所示的信息
然后单击确认按钮
直到Cloud9开始配置IDE(图1.5)

图1.5
您可能会遇到关于成为“root”用户的警告消息
您可以在此初期安全地忽略该用户
我们将在13.4.4节讨论首选但更复杂的实践
称为身份和访问管理(IAM)用户

因为使用两个空格进行缩进是Ruby中几乎普遍的约定
我还建议将编辑器更改为使用两个空格而不是默认四个空格
如图1.6所示

图1.6
您可以通过单击右上角的齿轮图标
然后将“Soft Tabs”设置更改为2来执行此操作
请注意,这会立即生效;您无需单击“保存”按钮

Cloud IDE用户还需要注意遵循
Bitbucket(第1.4.3节)和Heroku安装说明(第1.5.1节)
这些说明自Cloud9成为独立服务以来已发生了细微变化

最后
选择遵循第3.6节中的测试设置的高级用户还应注意
云IDE上可能需要进行其他配置
详细信息请参见第3.6.2节

1.2.2 安装Rails
第1.2.1节中的开发环境
包括除了Rails本身之外我们需要的所有软件
首先
我们将通过添加配置设置做一些准备工作
以防止耗费时间安装本地Ruby文档
每个系统只需要执行一次
绝对不用担心尝试理解此命令

$ printf “install: –no-rdoc –no-ri\nupdate: –no-rdoc –no-ri\n” >> ~/.gemrc

要安装Rails
我们将使用RubyGems包管理器提供的gem命令
该命令涉及在命令行终端中键入清单1.1中所示的命令
如果在本地系统上进行开发
则表示使用常规终端窗口
如果使用云IDE
则表示使用图1.2中所示的命令行区域

$ gem install rails -v 5.1.6

清单1.1: 安装特定版本的Rails
这里-v标志确保安装指定版本的Rails
这对于获得与本教程一致的结果非常重要

1.3 第一个应用

发表在 有用的 | 标签为 , , , , | 留下评论

Ruby on Rails 学习手记 (十)

经过一个周末的休息
其实是研究部署rails到ec2失败
我们继续开始枯燥乏味的学习
学习么
遇到这种情况是难免的
碰到不懂的
总不能一直卡在这
万一是需要全本书看完自然就懂呢

于是我们继续未完的第十章的忧伤

后空翻一个

貌似谷歌翻译不需要富强也能访问
会使用工具是人和动物的巨大区别

简言之就是
第十章
我们将学到
如何安全的管理用户

开始前先复习一下

确保周末的胡乱测试没有把程序整垮

万幸
还活着
于是
git checkout -b updating-users
开始新一章的自挂东南枝


理念很简单
任何人都可以注册
但是只有当前登录用户可以修改自己的信息
很合理
那么怎么实现呢?


先建一个雏形
这个算是view的框架吧
然后更新controller

接着把view写出来

我们的view是自带翻译的
所以和教程里的不太一样


对于成功的用户信息更新
我们就跳转到用户信息页面
反之报错并留在更新页面

发表在 有用的 | 标签为 , , | 留下评论

蛋糕的灵魂

发表在 无聊图 | 留下评论

高手在

发表在 无聊图 | 留下评论

物理不错

发表在 无聊图 | 留下评论

NGINX DEBUG

I suggest to try to debug in this way (just copy-paste into the console, then execute):

printf ‘\n\n General: \n\n’; nginx -t ; printf ‘\n\n Access: \n\n’ &&
tail /var/log/nginx/access.log ; printf ‘\n\n Errors: \n\n’ &&
tail /var/log/nginx/error.log

This is a super comfortable way to debug.

发表在 有用的 | 标签为 | 留下评论

程序员鼓励师

发表在 无聊图 | 留下评论

Ruby on Rails 学习手记 (福利)


鼓起勇气打开第十章
有点缺乏动力了
急需程序员鼓励师
听说爱因斯坦学习累了
会拉会小提琴

我们不妨找一些其他事情来打扰一下
好像亚马逊有免费云
可以研究一下
毕竟
以后如果真的有幸开发出什么东西了
总得发布出来吧
国内阿里云虽然服务好
但是贵啊
有免费的练手
何乐而不为

说干就干

本着小心谨慎的原则
先看看这玩意儿有没有坑

不出所料

陷阱还是有一些的
不过大多数是由于考生审题不清
不能怪AWS吧

于是
带着老司机们的前车之鉴
我们上路了

当然
按照我们一如既往的懒人尿性
肯定不愿意自己去慢慢研究的
找一个看起来还行的开路者照抄就好

10分钟不到

我们就入手了一个免费aws账户

免费的东西还挺多
咱从ec2开始
筛选免费的结果
直接第一个

第二步都没得选
只有t2.micro是免费的
后面都选默认的
直接review and launch
当然,需要下载一下密钥文件

这就可以了。。。

于是
我们正式在美东有了一个服务器
可望且可及

跟着这个教程去“及”一下

不同的系统还不一样

先装一个AWS Command Line Interface

这就进来了
然后搭建rails环境

当然,继续找一个前车来follow
今年8月3号的,应该是最新的能用的

好像有点高兴的太早了
gem update的时候莫名就卡住了
估计得换一个教程

一夜无话
当你陷入一个问题的时候
不妨带着问题入睡
也许醒来就有灵感了
于是今天早上
突然意识到昨天在AWS里随机选了第一个instance

赶紧terminate了
重新选了一个ubuntu的instance

干干净净
什么都没有
白手起家吧
第一步安装rvm吧
https://github.com/rvm/ubuntu_rvm
装好后在aws里重启一下instance
第二步装ruby
rvm install ruby

第三步装bundler
gem install bundler
第四步设置git

第五步安装NodeJS和Rails

第六步bundle install
中间出现了一堆问题
不停的google之后
sudo apt-get update
sudo apt install gcc libcurl4-openssl-dev libxml2-dev -y
sudo apt-get install libsqlite3-dev libmysqlclient-dev
sudo apt-get install postgresql-commo
sudo apt-get install postgresql-9.5 libpq-dev
sudo apt-get install libpq-de
gem install pg
bundle update
rails t
rails s

总算成功了
现在可以从http://localhost:3000内部访问我们之前的sample_app了

但是
如何从外部访问呢?
make it public

貌似这一篇文章里内容有点多
信息量太大不适合作为一个课时学习
不如
直接跳过?

同意

跳过的内容详见以上截图
以下省略45分钟

细节可以看这儿
https://gorails.com/deploy/ubuntu/18.04
或者这儿
https://www.phusionpassenger.com/library/install/nginx/install/oss/bionic/
结果是这样的


这样一想
好像
貌似
可以装个富强。。。

网上教程一大堆
直接找了一个
记得编辑入站规则
能用。。。
开心

越跑越远了。。。
赶紧回头
虽然好马不吃回头草
但是也不能不撞南墙不回头啊

于是继续Rails大计
https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/aws/nginx/oss/bionic/install_passenger.html
这时候
好像发现
开头就错了
需要推倒重来。。。

所以
前面写的都是铺垫
都是背景
就如同这个Ruby on Rails系列教程一样
只要看一下每章的最后一节就好
咱来从头重新捋一捋
大局观很重要

现在摆在我们面前的路有两条
一是再次terminate这个instance
找个正规教程从头跑一遍
这叫打好扎实的基础
教程已经找到
https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/
但是可能要利用到今天的福利才能打开
另一个就是
一根筋继续闯下去
神挡杀神
佛挡杀佛
肯定有其他人碰到过类似的环境
肯定存在神人有解决方法
我们现在遇到的问题大概就是
sudo service nginx start
Job for nginx.service failed because the control process exited with error code.
See “systemctl status nginx.service” and “journalctl -xe” for details.
nginx服务启动不了
说配置有问题
站在人生的十字路口
该何去何从
周星星如是问
徐锦江答:我全都要

生命在于运动
技术改变生活
周末愉快
下周继续

发表在 有用的 | 标签为 , , , , | 一条评论

手摇充电宝

发表在 无聊图 | 留下评论