如果 ubuntu 足够新,例如 20.04,那么直接用源里面的就行了。
dist 里面是不是只有一个 index.html 页面,其它都是 js css?
upstream app {
server 127.0.0.1:3002
}
server {
listen 443 ssl;
server_name www.udask.net udask.net;
ssl on;
ssl_certificate /etc/nginx/cert/udask.pem;
ssl_certificate_key /etc/nginx/cert/udask.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers d...;
ssl_prefer_server_ciphers on;
root /home/udasker/udaskweb/front_web/dist; #这里是vuejs的build文件
try_files $uri/index.html $uri index.html; # <- 这里加 index.html 到末尾
location ~ ^/api/ {
proxy_pass http://app; #后端rails服务 使用3002端口
proxy_set_header Real-IP $remote_addr;
proxy_set_header Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
autoindex_exact_size on;
autoindex_localtime on;
proxy_read_timeout 240s;
}
}
版本一,Rails 只处理 /api 路径,404 由 nginx 处理(可以设置用 dist 里面的 404 页面):
upstream app {
server 127.0.0.1:3002
}
server {
listen 443 ssl;
server_name www.udask.net udask.net;
ssl on;
ssl_certificate /etc/nginx/cert/udask.pem;
ssl_certificate_key /etc/nginx/cert/udask.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers d...;
ssl_prefer_server_ciphers on;
root /home/udasker/udaskweb/front_web/dist; #这里是vuejs的build文件
try_files $uri/index.html $uri;
location ~ ^/api/ {
proxy_pass http://app; #后端rails服务 使用3002端口
proxy_set_header Real-IP $remote_addr;
proxy_set_header Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
autoindex_exact_size on;
autoindex_localtime on;
proxy_read_timeout 240s;
}
}
版本二,Rails 接管 404 页面:
upstream app {
server 127.0.0.1:3002
}
server {
listen 443 ssl;
server_name www.udask.net udask.net;
ssl on;
ssl_certificate /etc/nginx/cert/udask.pem;
ssl_certificate_key /etc/nginx/cert/udask.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers d...;
ssl_prefer_server_ciphers on;
root /home/udasker/udaskweb/front_web/dist; #这里是vuejs的build文件
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header NginX-Proxy true;
proxy_redirect off;
root /home/udasker/udaskweb/front_web/dist;
autoindex_exact_size on;
autoindex_localtime on;
proxy_read_timeout 240s;
}
}
没有实操,不一定对。
感觉 location @app 是不是可以整个删掉,前面已经设置了 root 和 try_files 了。
upstream app 指向的是 sock file,改成 3002 端口。
科学上网
先分析一下是哪里慢,服务器响应慢的话优化服务器(算法或缓存),网络慢的话看 CDN 是否生效。
如果确实有很慢的服务器查询无法优化,那么可以考虑用分布加载等方案,这个要看你喜欢怎么做了,不一定要动 Turbolinks,例如可以用 Stimulus 写一个异步加载的 controller(官方例子),在这个 controller 实现 loading 动画。
具体情况具体分析。
噗,用 turbolinks 的网站一般用服务端渲染,没有 SPA 那么长的客户端渲染时间需要加 loading 动画。
硬要加的话,把主体部分设成 display: none,loading 部分设成可视,然后在 turbolink:load 事件里面把两者显示切换过来。如果加载太快就用 setTimeout 再等几秒。
用 docker 试用官方镜像:
$ docker run -it -v $(pwd):/app -w /app rubylang/ruby:3.0.0-preview1-bionic bash
先试了个 ractor 的 hello world
irb(main):001:1* ractor = Ractor.new do
irb(main):002:1* puts Ractor.recv
irb(main):003:0> end
<internal:ractor>:38: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
=> #<Ractor:#2 (irb):1 blocking>
irb(main):004:0> ractor.send 'hello ractor'
hello ractor
=> #<Ractor:#2 (irb):1 terminated>
要看《Ruby 元编程》,记得是“打开类”一章说到。
顶楼说了两个话题,要分开讨论。
已上传至 bilibili,审核没遇到问题。看来是我混淆了直播规则和视频投稿规则。
https://space.bilibili.com/552654808/channel/detail?cid=147806
上几届没有放赞助商信息,其实是没空做。
不过我看投稿规则里面是允许放商业信息的,我投一个看看。
B 站不允许赞助商展示,沟通不顺畅,目前不打算放 B 站。YouTube 是最可靠的视频存档处。
fork 然后提交 pr,生产环境先切到自己的 fork 版本。
Stimulus 优在和服务端渲染完美配合,无论怎么插入组件只要有 data-controller 属性就会自动绑定,不用关心 js 绑定的时机。
if (data["like"]) {
this.svgTarget.classList.remove("text-gray-300");
this.svgTarget.classList.remove("hover:text-gray-400");
this.svgTarget.classList.add("text-yellow-300");
this.svgTarget.classList.add("hover:text-yellow-400");
} else {
this.svgTarget.classList.remove("text-yellow-300");
this.svgTarget.classList.remove("hover:text-yellow-400");
this.svgTarget.classList.add("text-gray-300");
this.svgTarget.classList.add("hover:text-gray-400");
}
从这里看出来 tailwind 在 js 里面调用很麻烦。如果是 BEM 风格就是
this.svgTarget.classList.toggle("like-icon--active", data["like"])
另外 tailwind 不能解决开发者设计能力的问题,要快速做原型不如用 bootstrap。
不如直接去 HR 部门了解需求。
根本就没必要在 Rails 上加 Grape。
这个我也很迷,用自己账号看是 10 小时,用管理账号看是 2 小时,匿名不登陆看是 10 小时。所以只看见两小时的可以试试浏览器匿名模式。
https://bugs.ruby-lang.org/ 是开放的,不需要大佬,先搜索有没有同类 issus,再阅读提交指引,然后提交特性请求,core team 会回复。
RubyConf China 2020 Gitter 聊天群现已开放 https://gitter.im/rubychina/rubyconfchina2020
将用作会议讨论/提问/抽奖,欢迎加入。
Rails 工具指什么?
6.1 有 minimal 参数:
rails new cool_app --minimal
https://github.com/rails/rails/pull/39282
如果一条条参数敲其实现在也可以去掉不用的组件。
我测试不翻也打不开,它托管在 github pages 上,目前没有计划迁出。
能打开 github 的话可以在这里打包下载整个网站到本地看
python 是 9 楼提的。
进标准库要有取舍,目前来看引入统一的异步调度机制对 Ruby 更重要(在做了)。
python 标准库有红黑树?