Rails 基于 Docker 在 Win10 平台搭建 Ruby on Rails 6.0 框架开发环境

zcxey2911 · 2020年11月17日 · 最后由 dayudodo 回复于 2020年12月18日 · 1458 次阅读

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_170

2020 年,“非著名 Web 框架”--Ruby on Rails 已经 15 岁了。在今年,Rails 6.0 趋于完善,除了拿掉讨厌的 Jquery,Webpacker 也成为默认前端打包方案,Sprockets 开始软着陆,未来很可能会和 Jquery 一样被彻底废弃,这就是历史的进程。

由于历史原因,本身就由 Ruby 撰写的 HomeBrew 在 Mac os 系统上大行其道,所以大部分 Rails 程序员的主力电脑都是 Mac book pro,而使用 Windows 系统的用户就没那么好运了,比如 Rails 6.0 开始启用 Webpacker,这就需要用户安装 yarn,由此带来一系列的连锁反应,还有令人绝望的 Win10 系统下的 CoffeeScript 问题,这也是 Rails 包括 Jekyll 时常令人诟病因素之一:搭个环境都这么费劲,我为啥不用 Django、Laravel 亦或者是 Springboot 呢?为什么非得受这份罪呢?因为.......热爱,本次我们使用 Docker 来简化 Rails 环境的搭建,让它能够在各个操作系统下做到无缝开发。

当然了,第一步还是安装 Docker,没有安装的朋友请参照:win10 系统下把玩折腾 DockerToolBox 以及更换国内镜像源 (各种神坑)

然后在电脑内建立一个 rails 项目的目录

mkdir myr  
cd myr

第三步,拉取基础镜像,该镜像内置了 ruby2.5.1 和 node11 为我们安装 Rails6.0 打好基础

docker pull starefossen/ruby-node

拉取镜像成功后,启动容器并且进入命令行,记住用挂载命令把当前目录共享到 Docker 容器内部,不会设置共享文件夹的同学可以参照这篇文章:上穷碧落下凡尘:Win10 系统下基于 Docker 配置 Elasticsearch7 配合 Python3 进行全文检索交互

docker run --rm -v /myr:/usr/src -w /usr/src -ti starefossen/ruby-node /bin/bash

由于在容器内部已经安装好 ruby2.5.1,所以 gem 也随之安装好,那么我们可以在容易内部安装 Rails

gem install -v 6.0.2 rails

这里用-v 参数可控制版本号。

在容器内安装 Rails6.0 成功之后,直接在容器内建立项目

rails new .

项目建立好以后,你会发现在 windows 目录会同步出现 Rails 项目文件

此时,在容器命令行内输入 exit 退出容器,此时容器就会停止并且删除,这个容器也完成了它的历史任务,它的存在就是帮我们创建好一个 Rails 项目,并且通过共享文件的形式在宿主机同步。

下一步,为了能在宿主机运行我们的 Rails 服务,需要一个 Dockerfile 文件来定制我们自己的镜像

FROM starefossen/ruby-node  

# 设置项目目录  
WORKDIR /usr/src/app  

# 设置配置文件  
COPY Gemfile* ./  
RUN bundle install  

# 拷贝文件  
COPY . ./  

# 暴露端口  
EXPOSE 3000  

# 启动服务命令  
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]

写好 Dockerfile 之后,我们就可以打造一个全新的镜像,这个镜像用来运行我们已经建立好的 Rails 项目。

docker build -t myr .

打包成功后,输入命令查看镜像

docker images

此时,启动容器

docker run -p 3000:3000 -v /myr:/usr/src/app/ myr

访问一下 http://localhost:3000

熟悉的“世界人民大团结”欢迎页面已经映入眼帘,就是这么的简单,有人说了,Python 才是如今的“当红炸子鸡”,现在学习 Rails 会不会是“四九年入国军”?我想说的是,时至今年,全球依然有超过一亿的网站和后台服务由 Rails 驱动,其中不乏国际知名企业,如:Airbnb、Basecamp、Github 等,尽管 Php 和 Python 的使用范围比 Ruby 更广,但其最受欢迎的两个框架 Laravel 和 Django 分别比 Rails 的代码贡献者要少很多。更多的开源代码贡献者意味着 Gem 的质量非常之好,俗话说,Gem 为 Rails 倾尽了所有,而 Rails 经常被人们盛赞,也是因为支持它的社区正在努力创建非常多可重用的库。

我们可以看看在 github 上的开源代码贡献者的数量对比:

GitHub contributors to Ruby frameworks:

Rails: 4260
Padrino: 228
Hanami: 146
Sinatra: 387

GitHub contributors to Django (Python) and Laravel (PHP):

Django: 2,007
Laravel: 740

差距可见一斑,归根结底,一款框架的开发和使用还是得以“人”为本。一如既往,专注 web,专注产品的 Rails6.0 在新的时代里一定会继往开来、再创辉煌。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_170

我在 mac 下也是在 docker 内开发,也建议开发团队用 docker 同步开发环境。

不过 docker 对于新手来说始终是另外一层需要学习的知识,避免问题交叉可以尽量往后放一放。

听说 WSL2 有很大进步,不知道能不能作为新手开发环境,如果有人写一写就好了,我没有 Windows 环境做不了。

Rei 回复

WSL 2 基本上可以看作一个 Ubuntu,基本上照 Ubuntu 的配置教程来整就可以。

开发环境的话,RubyMine 和 VSCode + WSL 插件都正常,高亮、包识别以及跳转什么的都没问题。

WSL 更优

感谢。 但感觉比 WLS 复杂。

实际上我个人认为 WSL 和 Docker 是各擅胜场,但从开发者编写代码的角度上讲,WSL 更简单,如果你是想体验 Linux 命令行,使用 bash,首推 WSL,安装简单,操作简单,上手难度最低,体验也很棒。甚至如果你想体验图形界面,可以在 WSL 里装个 LXDE,gnome 啥的再加个 xrdp 或 vncserver 然后简单体验一下。这样可以不用装虚拟机或者真机,一边用着熟悉的 Windows 的同时,一边体验下 Linux 桌面,但是效果没那么好,安装前记得改一下更新软件包的源,使用国内的镜像源。 而 Docker 的使用初衷,应该是从交付者的角度出发的,它能够实现容器之间的完全隔离,容器内部是最简或者是缺省的 Linux 64 位系统 - 由于环境用户的隔离,能够保证对应的应用在对应的容器中稳定运行,并且启动方式简单,只须一个 64 位的宿主机,其余不需要特殊的配置,原理:依靠细粒度命名空间,做到资源用户的隔离,依靠控制组,为对应的控制组分配资源并限制资源的使用,依靠 UnionFS,为 Linux 操作系统设计的用于把多个文件系统"联合"到同一个挂载点的文件系统服务,所以如果你对项目后期的部署以及后期的横向扩展负责,推荐用 Docker

我觉得 win 10 wsl 挺好的

wsl 解决一些环境部署对 win 系统不太友好或者方便的问题(如 rails 环境)
其他放 win10(vscode、rubymine 等)
特殊版本处理的放 dokcer(mysql、pg 或者其他)

wsl 用过,但个人觉得还是用最接近真实的 linux 服务器来配置环境比较好,所以我从 vagrant,docker 又回到了 vmware+ubuntu+vscode,因为 vscode 有远程编辑功能(remote ssh),感觉就和本地开发一样,也没有 win10 里面大小写的一些小毛病,WSL 里面一些 配置总归还是和真实的 ubuntu 系统有区别,为避免各种未知的坑,还是用纯粹的 linux 环境更好,毕竟 rails 最终还是要跑在 linux 服务器中。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号