我是在开发环境用 docker 几年了,每个项目都要有隔离空间。但是生产环境用不用还要看情况,目前只有 heroku 一家的 docker 部署环境能让我满意(便利方面),k8s 已经看懂不应该让开发人员直接使用。
看来是 /index.html
不用绝对路径会造成循环重定向。
试试
try_files $uri /index.html;
如果 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 工具指什么?