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

zcxey2911 · November 17, 2020 · Last by dayudodo replied at December 18, 2020 · 1359 hits

原文转载自「刘悦的技术博客」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 环境做不了。

Reply to 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 服务器中。

You need to Sign in before reply, if you don't have an account, please Sign up first.