暂时没遇到,我之后留意一下。
Stimulus 如果进行了 dom 操作,也需要注意历史恢复的状态。相比之下 Lit 只需要 render 简单多了。
我第一份工作还是 2011 年,当时 Rails 是个时髦的技术。我毕业后半年没找工作鼓捣些开源项目,后来觉得还是要找个工作获得收入。于是看招聘信息,当时一位国内有名的 Rails 布道者的公司在招聘,我就写邮件交了份简历,然后就让我去北京入职了。
Web 组件应该对 Hotwire 很友好,具体是遇到什么问题了?
Hotwire 点赞👍
v0 这个版本号一看就很不靠谱 😂
v1 是 2017 年提的,也过去很久了。
Lit 3.0 是 2023 年发布的,这个时候我才开始认真考虑。
最近实际在项目里面用了感觉可以了,最大的吸引力是它跟 Turbo 兼容。
Web component 已经被主流浏览器支持了。我看了下 caniuse,safari 不支持的只是 is 属性,也就是修改内置元素的能力。现在看来不允许修改是有道理的,各个浏览器内部实现不一样,很难说修改内部元素会产生什么问题。但这个特性不影响 web component 应用。
浏览器 API 的演变就是很缓慢的,通常要落后于第三方框架。但一旦成为标准,其他框架就可以精简一大堆内容。例如 jQuery 和 querySelector,曾经有一个庞大的 jQuery 生态,标准演进后就消亡了。
我不是说 react 会消亡,因为现在有很多应用和生态构建于 react。而是当更多开发者了解 Web component,那么基于 Web 标准构建的组件会越来越多。
怎么我觉得这两篇文章都是推 Web Component 的。
Web Component 胜在可交互性,现在 js 框架互相不兼容,用 react 写的组件要用在 react 组件里面。兼容也不是不行,只是要做很多适配器,估计没人这么用。而 Web Component 可以用在 erb,也可以用在 react。
我正在写一篇博客,Rails 开发者应该拥抱 Web Component。
网络问题。
7 默认也不打包了。
Rails 7 可以选择 sprockets 和 propshaft,Rails 8 默认是 propshaft。
对于 sprockets,确认 manifest.js 里面有:
//= link_directory ../stylesheets .css
那么 app/assets/stylesheets
里面的每个 .css 文件都会单独编译和提供。
例如添加一个 app/assets/stylesheets/page.css
,那么就可以使用 page.css
在布局 app/views/layouts/application.html.erb
里面的 head 预留位置:
<head>
...
<%= yield :head %>
</head>
然后在对应页面:
<% content_for :head do %>
<%= stylesheet_link_tag "page" %>
<% end %>
对于 propshaft,默认 app/assets/stylesheets
目录内的文件都会单独提供,从上面布局部分开始做就行。
Propshaft 文档提到了 https://github.com/rails/propshaft?tab=readme-ov-file#bypassing-the-digest-step
所以用 esbuild 处理也可以。区别是一个默认拆分,选择性打包;一个默认打包,选择性拆分。看自己习惯哪种。
又研究了一下,代码分割也可以在 esbuild 这层做
https://esbuild.github.io/api/#external
不知道会不会跟 asset pipeline 的 hash 文件名冲突,做过的可以分享一下。
我不想每次改代码都让 js 缓存整个失效。codemirror 依赖压缩之后有 230 KB,未压缩前是 800 多 KB。
通过 importmap 提供可以让每个依赖单独缓存。
Rails 增加了一个配置在应用层忽略 SSL,让前面的代理处理,避免重定向:
# Assume all access to the app is happening through a SSL-terminating reverse proxy.
# Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
# config.assume_ssl = true
Kamal 2 新增了 kamal proxy 处理 SSL,不用 thruster 处理证书(而且它在代理后,处理不了部分证书校验)。不过 thruster 还可以用来处理文件传输之类,所以在 Rails 8 默认的 dockerfile 内。
Kamal 1 部署一个小时应该是 docker 缓存没做好,而且网络有问题。以前我部署一个应用也是 5~6 分钟。
看下 docker 的 log,应该有错误提示。
Rails 8.0 Beta 1: No PaaS Required https://rubyonrails.org/2024/9/27/rails-8-beta1-no-paas-required
说明 DHH 终于碰到这个问题了 🤣
ruby 2.0 已经是 11 年前的了,有什么理由必须装 2.0 吗?
不认识。
注意文明用语。
这个话题在 V2EX 讨论过很多遍 https://www.v2ex.com/t/1025454
系统层级增多之后,每个环节的人就会想多做一些事情增加存在感。
前端哈希要看防的是什么,我想了下防的是后端记录明文密码。但是 MD5 太快了,彩虹表一堆,没什么意义。
两个人争不出结果,让上级决定。
在 rails console
里面尝试
File.read("path/to/file")
如果报错那么就是路径或访问权限问题。
保存编码当然用 unicode。
到生产环境看看 key 设对了没有。
实际上 Rails 官方有个基于 docker 的命令行工具,适合体验用:
https://github.com/rails/docked
安装:
docker volume create ruby-bundle-cache
alias docked='docker run --rm -it -v ${PWD}:/rails -u $(id -u):$(id -g) -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cli'
使用:
docked rails new weblog
cd weblog
docked rails generate scaffold post title:string body:text
docked rails db:migrate
docked rails server
我太久没用 brew 了,确实忘了要执行这个:
If you need to have ruby first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc
如果只想用 brew 管理的最新版本 ruby,就不需要用带版本号的 PATH。
如果你用某一个管理工具安装成功了,那很好,先继续学习。
我在这些管理工具踩过不少坑,怕了这些自动改环境变量的工具,再也不想花时间在这上面了。
很遗憾楼主最终没解决,我推测问题是出在编译工具和环境,这个换什么管理工具都是一样的。但不实地操作我也不知道怎么修复。
我要补充一下,对于新手来说最简单的方法是使用 homebrew:
brew install ruby
为了配合某些 Rails 教程版本,brew 可以安装特定版本 Ruby:
brew install [email protected]
brew 也可以安装 libpq
libvips
之类的编译依赖,对于初学环境已经够用。
如果要维护老项目,需要安装特定的包和依赖,去用 docker 和 docker compose,这是终极方案。
如果不是很熟悉 Linux 环境或者机器性能不好,别用 rvm、rbenv、asdf 这类基于环境变量的版本管理工具,很容易把环境变量搞得一团糟。
看起来只要一编译就卡住?
看看 xcode-select -p
的输出,我的是
/Library/Developer/CommandLineTools
sudo xcode-select --resst
可以重置。
另外编译的时候检查内存和硬盘有没有耗尽。