Rails 8.0.0
版本基于 Ruby 3.3.5
分几个部分介绍:开发、中间件、部署。
dev
rails generate scaffold post title:string body:text
这会生成全部 MVC,DB migration,以及 spec 测试文件。 如果不需要 View 可以使用:
rails g resource comment references:post comment:string
CDN
的方式快速引入CSS
编辑app/views/layouts/application.html.erb
,插入一行<%= stylesheet_link_tag "https://cdn.simplecss.org/simple.css" %>
。
<%# Includes all stylesheet files in app/assets/stylesheets %>
<%= stylesheet_link_tag :app, "data-turbo-track": "reload" %>
<%= stylesheet_link_tag "https://cdn.simplecss.org/simple.css" %>
<%= javascript_importmap_tags %>
class PostsController < ApplicationController
before_action :set_post, only: %i[ show edit update destroy ]
# GET /posts or /posts.json
def index
@posts = Post.all
raise 'err'
end
...
rails action_text:install
修改model
,添加对应富文本字段has_rich_text :body
:
class Post < ApplicationRecord
has_rich_text :body
has_many :comments
end
修改view
,将textarea
修改为rich_textarea
:
<div>
<%= form.label :body, style: "display: block" %>
<%= form.rich_textarea :body %>
</div>
websocket
的hotwired
功能,让页面数据实时
更新:修改View
在页面添加turbo_stream_from
标签:
<%= turbo_stream_from @post %>
修改model
添加broadcasts_to
:
class Comment < ApplicationRecord
belongs_to :post
broadcasts_to :post
end
此时我们同时打开 2 个网页,在一个网页上更新一条数据,那么在另外 1 个网页页面会实时更新, 而不用按下“F5”。
将鼠标移到链接上,从日志可以看到接收到了get
请求,为什么页面跳转会变快,
从这里也“可见一斑”。
也就是说当鼠标移到链接上(还没有点击时),服务器已经开始处理请求了。 这会大大提高客户端的使用体验,服务器也会增加一定的负担。
只需运行一条命令就可完成登陆功能:
rails generate authentication
rails db:migrate
在application.html.erb
加入退出登陆:
<body>
<%= button_to "sign out", session_path, method: :delete if authenticated? %>
<%= yield %>
</body>
bin/rails generate script my_script
bundle exec ruby script/my_script.rb
官方原话是 Solid Adapters(可靠的适配器)。在国内我们喜欢用“中间件”这一词。
主要有 3 部分:Solid Cable
、Solid Cache
、Solid Queue
。
rails 8
放弃了对redis
的依赖。取而代之使用SQLite
和 3 个中间件融合解决了pub/sub
websocket 服务器、
缓存、以及队列 3 个重要功能。
这三个适配器的设计理念很简单:现代固态硬盘和 NVMe 硬盘的速度足以处理许多以前需要内存解决方案才能完成的任务。通过利用这些高速驱动器,Rails 不再需要单独的基于 RAM 的工具,如 Redis。
Rails 8 还引入了 Propshaft
作为新的 assets pipeline 默认设置,取代了沿用已久的 Sprockets
。它是一种更简单、更现代的 assets 管理方法,围绕当今开发人员的核心需求而构建的。它的目的很简单:为 assets 提供清晰的路径,并应用 digest 进行缓存。
部署方面 rails8 默认加入了Kamal 2
和 Thruster
,分别解决了 docker 容器化部署
以及https
自动证书问题。
但国内目前并没有与之适配基础设施,慎用。
如果需要跳过kamal
执行:
rails new blog --skip-kamal