最近用 Rails 开发网站的一些心得分享 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
uijk
V2EX    分享创造

最近用 Rails 开发网站的一些心得分享

  •  
  •   uijk 2024-01-15 22:20:30 +08:00 2024 次点击
    这是一个创建于 635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近决定撸一个类似 HackerNews 的网站,为啥要撸这样一个网站呢?原因是 Hacker News 这个网站,简单,简单,还是简单,这很符合我那一点点不靠谱的审美观,但 Hacker News 是英文的。所以,决定也搞一个中文的。以后,大家有没有好的网站,好的产品,就可以在上面发布,不需要到 Hacker News 或者 Product hunt 。完全中文,完全符合国人习惯,打破美帝垄断,自主创新。

    网站最初构想,很简单,用户提交一个网站(或者产品),填上标题、链接、描述,再加上图片,就可以发布了。对,是可以添加图片和显示的,相比全文字版的 Hacker News ,遥遥领先。

    所以网站功能也简单,基本上就是一个关于链接的 CRUD 操作,再加上一个用户注册功能。基本就这几个功能,至少在初期,不想搞得太复杂。当然了,也模仿了 Hacker News ,可以对链接评分,评论,还在网上抄了一个 Hacker News 的文章推荐算法。这几个功能都不算太难,所以也把它们放在初期就实现。

    技术选型上,虽然现在 web 开发,nextjs nuxtjs 之类的很热门,奈何我只会 ruby ,所以就选了“相对”比较熟的栈:Rails (但也有不少坑)。

    CURD 这些操作,Rails 太擅长了,基本都能帮我完成,没什么可说的。

    但是,对于用户注册这个功能,现在想起来,感觉这个用户注册功能搞得有点复杂了。本来手工撸一个简单的用户注册,也不太难。但不知道哪根筋搞错了,直接就上了 devise , 然后坑就开始来了。这个 devise ,功能虽然强大,但可能也是过度的。我就被 devise 里的一个忘记密码功能给带进坑里了。

    这个忘记密码功能,是通过邮件找回密码的。为了使用邮件找回密码,就得有邮件发送服务。为了找一邮件发送服务,找了国内的腾讯、网易、阿里,都不靠谱。网友推荐的 ZOHO ,也不适合。还有网友推荐 Yandex 的,现在北极熊和西方国家那关系,也不敢用。找了亚马逊的,用户友好度超差,到现在还搞不懂怎么用,虽然已经发了 2 封测试邮件。

    后来,自己还搭建一 mailserver 的 docker ,当我的 QQ 邮箱收到自己的 mailserver 发来的邮件,着实让我高兴了一把。但我尝试往 gmail 发送邮件时,被拒收了。具体原因忘了,好像是要通过什么认证的邮件服务,发出的邮件 gmail 才接收。我的心马上又薄凉薄凉了。自己搭建邮件服务,没那么简单。

    后来,又了解到 sendgrid 可以发送邮件,马上注册一个,日,又提示我的账户没有授权。差不多想放弃,后来,发现 brevo ,有免费额度,每天 300 封邮件,对我来说够用了。brevo 界面简单,友好。到这,忘记密码这个功能的最后一环,终于补上了。

    但为了折腾这个发送邮件功能,花了差不多 1 周,而代码开发才两天:(

    除了发送邮件是个大坑,我一直信赖的 Rails 本身也有坑,Rails 7 之后,引入了个 turbo 方法,文档少也就算了,结果在 iphone 手机上的浏览器(我的是 safari ),竟然不兼容。现在还没解决,如果看到这篇文章的网友,在手机上,打开 webtagr.com 网站时,遇到一些错误,是因为 Rails 的 tubro 方法,想把一个链接设置为 POST 方法,但在手机上,turbo 不起作用,这个 post 方法,就会回退为 get 方法,但在 rails 的 route 中,又没有设置对应的路由。所以报错。(如果有网友知道怎么解决,还请告知)。

    做这个网站给我的一些教训是:

    1. 以后开发网站,能不用 Rails 就不用 Rails 了
    2. 以后开发网站,在初期,不搞邮件相关的功能
    3. 以后开发网站,找个专业的 UI 来设计界面。

    不管怎么样,https://webtagr.com 还是上线了,众位网友大咖,有什么好的网站或产品,也可以到上面去分享。

    11 条回复    2024-01-19 12:09:27 +08:00
    fgt1t5y
        1
    fgt1t5y  
       2024-01-15 22:25:37 +08:00


    上传的图片是不是没改文件名?
    FightPig
        2
    FightPig  
       2024-01-15 22:28:10 +08:00
    1 、rails 现在内置的功能完全可以自己写个用户系统,很简单,我多年不用 devise 了,定制麻烦,而且国内大多喜欢用手机号,邮件不符合大多需求。
    2 、另外 turbo 不是 7 后引入的,文档 https://turbo.hotwired.dev/这里还不够?
    3 、我看你用的 importmap ,这个 safari 好像支持不太行,可以查看 https://caniuse.com/import-maps
    lordofmetis
        3
    lordofmetis  
       2024-01-16 07:26:27 +08:00 via Android
    楼主推荐现在学 rails 吗?感觉现在的 nextjs+vercel 更方便的样子
    uijk
        4
    uijk  
    OP
       2024-01-16 14:54:30 +08:00
    @FightPig 非常感谢指正
    uijk
        5
    uijk  
    OP
       2024-01-16 14:54:54 +08:00
    @lordofmetis 下一个网站打算用 nextjs
    uijk
        6
    uijk  
    OP
       2024-01-16 21:24:42 +08:00
    @fgt1t5y 新的版本改文件名了
    kuber
        7
    kuber  
       2024-01-17 18:55:36 +08:00
    @uijk 既然每个网站都是标题,图片和描述,不如做成瀑布流的形式,感觉好看些,没有那么 geek 。当然只是我个人的喜好
    sead
        8
    sead  
       2024-01-17 21:34:20 +08:00
    mailjet
    这个完美嵌入 rails ,免费版每天 200 个邮件推送
    uijk
        9
    uijk  
    OP
       2024-01-19 10:58:20 +08:00
    @kuber 这个建议很好。最初的想法是以标题和描述为主,图片是为了显得不单调。
    uijk
        10
    uijk  
    OP
       2024-01-19 10:59:23 +08:00
    @sead 已经用 brevo ,目前感觉这个还行。现在折腾邮件怕了。暂时不换了
    kuber
        11
    kuber  
       2024-01-19 12:09:27 +08:00
    虽然这种需求是一定有的,但是好奇个人做这样一个网站会有人去用吗,毕竟注册然后提交是比较耗时强的操作,除非有很好的推广能力,要不用户会很少吧。

    我有一个建议,能不能做成一个聚合网站,把几个网站上的推荐聚合起来,比如 V2EX, reddit 之类的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2663 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:26 PVG 10:26 LAX 19:26 JFK 22:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86