简单方法是先用 form_with
生成一个常规 Rails form(带有 csrf token),然后页面内一段 js 提交:
<script>document.getElementById('form-id').submit()</script>
搜 js 提交可能会查到纯 ajax 然后碰到 csrf token 的问题。
自建建议用 jekyll,横行比较别家静态网站生成器,我也觉得 jekyll 维护最好,文档齐全。
马太效应,强者越强。有这个需求的一开始就会选最成熟的平台,缺少人扩展 Ruby 的这一领域。
link_to method: :post
依赖 Rails ujs,是只能在 Rails view 里面使用的辅助方法。邮件内容在邮件客户端打开,没有加载 rails ujs 的前端库,不能使用。
通常做法是在邮件里写一个对应 get 的页面地址,在这个地址内让用户手动或者用 js 自动提交 post 请求。
新的层在 app/ 下新增目录就行了,app/ 下的目录会加到 autoload 的路径里,lib/ 目录还需要配置。
The Rails Doctrine 是 Rails 哲学的总结
原版:https://rubyonrails.org/doctrine/
中文翻译:https://github.com/ruby-china/the-rails-doctrine
其中“多元化的设计模式”这一节说了 model 层为什么是这样的,简单来说就是:实用。
如果还是觉得“我就是需要 service 层啊,Rails 不提供就是不对”,那么可以试试我写的这个 gem https://github.com/chloerei/active_service ……
多谢推荐
静态博客用来锻炼设计能力是不错的。
现在内容少,还是人工的。
是 ActiveStorage,附件的地址为了美观用了定制 Controller。
可以参考 https://gorails.com/ ,有订阅教程,也有按课程收费。直播感觉效率低又不可扩展。
这是社区准则 https://geeknote.net/policy/posts/190
目前看来不打广告卖货就行。
如果是第一次独立开发一个网站的话,不错,要坚持。
提个设计的意见,导航条的返回上一步和菜单按钮不应该同时出现。
会做的,优先级已经排在前面了。
导出功能还没开发,在要做列表中。预计文章和图片可以导出,评论暂定没有。
我用 docker 的目的之一是统一开发机的开发环境,如果应用跑在宿主机就做不到统一了,例如有的是 Linux,有的是 Mac,那么安装 imagemagick 等系统依赖,编译 gem 包的时候可能有差异。
风险的话,自己的应用还好,别人的应用要提防应用里面有恶意代码(例如盗取 ssh key)。我发现 vscode 有个好的功能是每次打开新项目会提示是否信任当前目录,如果不信任就不会运行一些需要运行代码的插件。
我开发环境是不安装 gem 和 npm 包到镜像里,而是启动容器之后安装到跟主机目录同步的 /app 文件夹。
分了几个 stage,base 用来开发;ci 用来跑自动化测试;builder 用来打包静态文件;production 继承 base,只安装必要的 gem 包,直接拷贝 builder 打包好的静态文件,不安装 npm 包。还有优化空间,但不想写得太复杂。
### base stage ###
FROM ubuntu:20.04 AS base
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
curl \
git \
gnupg \
imagemagick \
libpq-dev \
nodejs \
postgresql-client \
ruby \
ruby-dev \
zlib1g-dev
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y --no-install-recommends yarn
RUN gem install bundler -v 2.2.0
WORKDIR /app
### CI stage ###
FROM base AS ci
COPY Gemfile Gemfile.lock /app/
RUN bundle install --deployment && \
rm vendor/bundle/ruby/2.7.0/cache/*
COPY package.json yarn.lock /app/
RUN yarn install && \
yarn cache clean
COPY . /app/
### Budiler stage ###
FROM ci AS builder
RUN RAILS_ENV=production SECRET_KEY_BASE=1 bin/rails assets:precompile
### production stage ###
FROM base AS production
COPY Gemfile Gemfile.lock /app/
RUN bundle install --deployment --without test development && \
rm vendor/bundle/ruby/2.7.0/cache/*
COPY . /app/
COPY --from=builder /app/public/packs /app/public/packs
ENV RAILS_ENV=production
docker-compose.yml
要指定 base stage。另外还用了 docker-sync 提高文件同步性能。
version: '3.4'
services:
web:
build:
context: .
target: base
command: bin/rails server -b 0.0.0.0
environment:
WEBPACKER_DEV_SERVER_HOST: webpacker
volumes:
- geeknote-sync:/app:nocopy
ports:
- 3000:3000
depends_on:
- postgres
- redis
webpacker:
build:
context: .
target: base
command: bin/webpack-dev-server
environment:
WEBPACKER_DEV_SERVER_HOST: webpacker
volumes:
- geeknote-sync:/app:nocopy
ports:
- 3035:3035
worker:
build:
context: .
target: base
command: bundle exec sidekiq
volumes:
- geeknote-sync:/app:nocopy
depends_on:
- postgres
- redis
postgres:
image: postgres:12
environment:
POSTGRES_PASSWORD: postgres
redis:
image: redis:5
volumes:
geeknote-sync:
external: true
开发的时候先打开一个 shell docker-compose run web bash
,第一次安装 gem 用 bundle install --path vendor/bundle
,之后就正常 bundle。
好,重现了,看来要加个状态判断,我记到 bug 列表。😂
有可能是我的锅,看起来像是 js event 重复绑定的现象,但是我这不能重现。如果重现的话回忆一下之前的操作。
会加,下周之内。
这个在计划列表中,已经不少人提了,我要加紧了。😅
我不是很喜欢第三方登录:
如果很多人需要才会考虑。
重置密码功能做好了 https://geeknote.net/user/password/new 😅
先说为什么用 Markdown 而且没有实时预览。我觉得标记语言和所见即所得编辑器的区别是是否看得到源码,有的所见即所得编辑器添加了 markdown 快捷输入,其实应该归类于所见即所得。
而所见即所得的问题也来自于看到的不是源码,没办法一眼看到自己的排版是否正确,举个例子:
这个标题样式看不出有没有问题
但如果是标记语言就能看出来了
要不想每个元素选中查看是否格式正确,可以给一些元素添加额外的装饰。但搞太多装饰,又不如直接编辑源码一目了然,源码能提供一种无歧义的安全感。
不过我不否认可视化编辑器的上限更高,例如添加各种高级格式的块,但是太花时间。而开源的可视化编辑器多少有点问题,例如处理 list 的时候,怎么结束列表换到段落,或者回车跟删除键的操作是否相互抵消的(试了下 slate 就有这个问题)。这些问题虽小,但是用的时候如果碰到不合预期的地方就会很别扭。
我在项目之初定制了一个可视化编辑器(未完成) https://chloerei.com/rich-text-editor/ ,花了很多时间处理细节问题。我感觉已经完成了 70% 的目标,但是剩下 30% 可能要花两三倍时间处理,这样网站可能就卡在编辑器永远完不成了。其实我并不需要 GeekNote 的编辑器功能非常丰富,而是要清静,让人专注于内容。然后我又换到 Markdown 试了一下,只花了两三天就达到可用的状态了,于是我就换了。
总结一下,就是有限时间内可视化编辑器做不到我满意的程度,而 Markdown 编辑器可以。
不想用代码编辑器的原因一个是代码编辑器功能太多导致分心;另一个是附件管理太麻烦,每次插入图片都要打断思维。
重置密码还没开发,用注册邮箱发邮件到 [email protected] 我给手动重置吧,之后再改密码。
是有点碍眼,我稍后调整看看。
测了一下国内访问正常,现在能访问吗?
点右上角图标打开设置菜单里。
好的,样式会再调整。
所见即所得编辑器花了很多时间,但是发现越接近完成就越多小问题要处理,以至于网站本身没时间开发。后来做了个调查发现想用 Markdown 的人更多 https://twitter.com/chloerei/status/1368518434384797696 ,就转 Markdown 了。Markdown 也更符合 Geek 的定位,写文章的话并不需要太多复杂的格式。
感谢~。可以搬运一篇旧文章体验一下功能,而且网站也需要一些种子内容😏。