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
可以重置。
另外编译的时候检查内存和硬盘有没有耗尽。
删掉 /opt/homebrew/lib/ruby/gems/3.3.0/
,我看一些 build 目录在 gems 外面,应该已经被污染了。
还有我最近处理过一个 Ruby 安装问题是混用了不同的安装器,然后环境变量一团乱,最后把所有安装器卸载干净清理多余的环境变量,再重装 homebrew 和 ruby 解决的。
目录权限错乱了,本来 brew 目录下是 user 权限的,执行过一次 sudo 创建了 root 权限的目录,后续写入卡住了。
删了 /opt/homebrew/lib/ruby/gems/3.3.0/gems/
重新装 gem 也许有用,但不知道还有没有其他目录权限错乱。不行再删除 ruby 看目录清空了没有,再重新安装 ruby。
brew 安装的 ruby 不要用 sudo,它安装目录是属于用户的。
xcode-select --install
再尝试安装 Railsrails 7.2 将会添加可选的 devcontainer 配置 https://rubyonrails.org/2024/5/24/this-week-in-rails
这比自己写 docker compose 更方便一些,但不是所有编辑器都支持 devcontainer。
我用 docker 很久了,印象中用 homebrew 也没遇到什么问题。贴的日志太少无法判断。
找到一本 hotwire 的书,我还没看 https://www.hotrails.dev/
这个作者写了一篇博客怎么用 hotwire 思维做一个搜索框值得参考 https://world.hey.com/alexandre/how-to-build-a-cmd-k-search-modal-with-hotwire-981f5159
比如: “搜索框,输入内容按回车,跳转搜索链接/search?q=keyword”, 需要在 erb 和 stimulus 的 controller 里面写不少代码。
这不只是 get 表单么?