在 github actions 里面构建镜像,然后推到云服务的 docker registry。
发现楼主第二点已经说了
docker-compose.yml 里面修改 db service,加上:
networks:
- kong-net
不然 web 无法访问 db servcie。
其实如果三个 servie 都不加 networks 配置就是可以互相访问的,加了就隔离了。
去掉 self.table_name = 'posts'
看看,我觉得这行已经覆盖了 prefix。
form_with 加个 method: :get
你需要将 text_field 放在 form 里,搜索按钮提交这个 form。
<%= form_with url: tikus_path do |form| %>
<%= form.text_field : soujiaocai %>
<%= @soujiaocais %>
<%= form.submit '搜索', class: 'btn' %>
<% end %>
database.yml 里面
default: &default
# ...
host: db
去掉 socket: /tmp/mysql.sock
rails 和 db 在不同的容器,连接配置要用 service name 作为主机名。
已更正
新机制下 webpack 可以自己配置,webpacker 一个问题是配置是被隐藏起来的,即使懂得 webpack 也很难修改配置。
主要问题是 CI 环境不应该获得这个密钥,不然很难预料在日志或什么地方泄露。
试试 config.require_master_key = false
看看,有用的话可以弄成环境变量选择性关闭。
放到环境变量里不一定安全,还有一些隐患,例如要注意错误捕获服务会不会在报错的时候把 env 一并提交造成外泄;容器编排工具传输 env 也是明文的,没有专门的 secret 机制安全。
用 env 一部分原因是 heroku 这样的服务只支持 env,另外如果是开源软件把 secrets 放到源码库里很怪异,即使别人看不到内容。
k8s 和 docker swarm 支持用文件方式挂载 secrets,这样选择就多了。
哪种方式好我还没定论,目前用的是 dotenv 通过 .env 文件管理环境变量,这样同时支持 env 和文件两种方式设置 secret.
因为 12factor 我没有使用 credentials.yml,然后还需要 SECRET_KEY_BASE,我就用 env 把 SECRET_KEY_BASE 设为 1
RUN RAILS_ENV=production SECRET_KEY_BASE=1 bin/rails assets:precompile
哪个客户端?如果是 Google Play 市场里那个的话,已经很久不维护了,建议用浏览器。
因为下午被 ddos,加了一层 cloudflare。dns 生效时间有差异,再等等应该就好了。
Ubuntu 的包都拆开,可以装 node 不装 npm。
根据 install 的源码,似乎是需要有 npx 命令才会自动添加构建脚本,不然只会输出一段提示(容易被忽略)。也就是既要安装 npm 又要安装 yarn,这是个有待改进的地方。
好耶,不用解释为什么要 --skip-webpacker 了。
HTML 的 form 元素只支持 get 和 post,Rails 是在 form 里面加了 _method=put 来模拟 put|delete,然后 Rails 用到的中间件 Rack::MethodOverride 发现这个参数就会进行转换。
https://github.com/rack/rack/blob/master/lib/rack/method_override.rb
看源码除了 _method 这个参数,还可以用 HTTP_X_HTTP_METHOD_OVERRIDE 这个头。
所以服务端可以不用改,改客户端。
希望在下周前。
这是用 turbo stream 替换了第二个 select?那它是被替换了,select 的值没有 change 啊。
因为你同一时间发布了两个招聘贴,我以为是一家公司,所以屏蔽了。
这个帖子可以恢复,另一个还有问题,文末的链接不是公开访问的,有广告嫌疑。 https://ruby-china.org/topics/41939
建议公司招聘给出公司的联系方式,如果是猎头要表明自己是猎头。
那还是 WSL 比较好,相对来说免费,新人买一台服务器做练习太不划算。
之前有个 WSL 下 Rails 开发的帖子 https://ruby-china.org/topics/38499
“记录一个状态值”,具体是什么值呢?不同的数据有不同的处理方法,有持久化的,动态缓存的,或是只有启动时更改的配置。不同的数据有不同的处理方法。要说具体需求才能给出合适的解答。
建议看看 X-Y Problem https://coolshell.cn/articles/10804.html
把类定义放在 auto load path 以外的地方,例如 `lib'。
全局变量在多进程模式是不会共享的,在一个进程改了另一个进程还是旧的。比较推荐 redis。
全局变量是代码的 bad smell,把需求说出来看有没有其他解法。
我调试了一下,开发环境下在 initializer 里面打印 Clazz 的 object_id 和在 rails console 里面打印的 object_id 是不同的,不仅如此,每次修改 Clazz 的代码,它的 object_id 都会变化。但是生产模式不会有这个问题,所以我猜想是 Rails 开发模式的 auto reload 造成的。
我查文档证实了这个想法 https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#reloading
为了实现开发过程修改源码后立即反应到已经启动的应用里面,实际上 Rails auto reload 会移除旧的 class 常量,然后用同一个名字新建一个 class。class 已经不同了,所以用 ===
检查是 false。详情可以看上面的连接。
结论是,在 auto reload 开启的环境下,不要 cache 可以 reload 的 class/module。