Ruby on Rails way to explore https:https://cdn.v2ex.com/navatar/43ec/517d/81_normal.png?m=1579006983 https:https://cdn.v2ex.com/navatar/43ec/517d/81_large.png?m=1579006983 2024-12-22T10:27:29Z Copyright © 2010-2018, V2EX Ruby on Rails 用着太舒服了 tag:www.v2ex.com,2024-12-20:/t/1099039 2024-12-20T05:14:01Z 2024-12-22T10:27:29Z cj323 member/cj323 实在忍不住来发一贴吹一下 Ruby on Rails 。这两天用了一下,简直太爽了。

(在下之前一直是在中小企业做全栈,用过一些其他的语言和框架,主要是用 Node/Python 后端+React/Vue 前端,个人项目也用过 Next/Nuxt 。用 Rails 感觉很不一样,这里分享一下。)

首先,Ruby 语言很带美感。

  1. 没有 type ,我个人很喜欢,脚本语言就应该这样,自由便捷。虽然工程化差一点,但是写着舒服。
  2. 简洁,同样的东西可以用更少的字符实现,同时又比较好理解。

其次,Rails 是很完善又精美的框架

  1. 自带的工具极其完整,我之前接触的框架最完整的应该就是 Django ,但是和 Rails 相比简直小巫见大巫。Rails 几乎不需要第三方依赖,也不用上云 - db, orm, caching, storage, REPL, test, i18n, mailer 等等都是直接开箱用:这些随便一个在 Javascript/Python 生态里往往都是要第三方依赖甚至云服务,麻烦很多。
  2. Model(ApplicationRecord)用着很舒服,很多很方便的细节,随便举个例子比如 dirty methods 类似*_previously_changed?或者*_previously_was;这种基础逻辑在其他框架下基本都要自己实现,rails 直接自带,省不少事。

最后,Ruby 生态我很喜欢,当然这里我喜欢的点不是火爆程度以及工具多,Ruby 当然远没有 Python/Javascript 热。但是我能接触到的 Ruby 论坛和开源项目都是热度恰到好处 - 主要体现在人不是太多,迭代新事物速度不是那么激进。这点很好,不折腾。对比 JS 生态,同样的问题总有一大堆类似的工具解决,而很多工具用两年就淘汰,很糟心。

继续开发去了嘿嘿

]]>
手把手教您在 Baklib 上搭建一个模板网站 tag:www.v2ex.com,2024-12-01:/t/1094141 2024-12-01T11:09:46Z 2024-12-01T11:09:46Z xuejiangavvo32 member/xuejiangavvo32 说到建站这个事情,作为开发者的你可以有非常多的解决方案,更何况是 2024 年了,建站交给 AI 也能快速完成。用 WordPress 开源系统,用 Wix 、SXL 等 SaaS 平台,或者直接“Rails new"从零搭建。

本文将为你介绍一个建站新范式:Baklib 。Baklib 是用 Rails 框架构建的基于 Liquid 语言的模版建站平台,作为 Ruby/Rails 开发者,这道菜应该再熟悉不过了。

1. 注册 Baklib 账号

账号注册地址: https://baklib.com/get-started

首先咱们需要在 Baklib 上注册一个组织管理者账号(免费的)。当你注册好一个组织管理者账号登录到组织后台以后,我们可以看到在组织管理端有一个模板管理,点击即可进入到组织模板管理中心。

*** 如果提示试用版本,则联系客服注明来自 V2EX 申请免费版本 ***

2. 添加网站模板

Baklib 上的模板都是开源的,托管在: https://gitlab.com/baklib/themes

你可以做公共模板中选择喜欢的模板,复制 git 链接并添加到 Baklib 上,也可以参考 Baklib 的模板开发要求,自行打造权限的模板。具体参考:Baklib 模板开发中心

3. 安装站点

在 [市场] 中可以看到所有公共的模板,以及组织自己挂载的模板,选择安装,根据流程即可创建一个站点。

4. 站点管理

一旦创建好一个站点,就可以有三个入口:前端会自动生成一个独立域名的网站(可解析到自有域名),后台有个独立的网站内容管理端,以及模板在线编辑器。

参考用此模板创建的真实案例: https://release.baklib.cn

5. 模板开发

重头戏是对模板的二次开发支持,Baklib 设计了一个灵活的网站模板结构,你可以随时在线实时开发、实时预览,包括复杂的自定义字段、排版布局、查询检索等能力。

模板结构

 ├── assets └── images └── css └── Javascripts └── ... ├── config └── settings_schema.json ├── layout └── theme.liquid ├── locales ├── src ├── statics ├── snippets └── templates 

静态文件可直接添加到 statics 目录中,比如添加一个 about.liquid ,直接前端输入地址: /s/about 即可打开。 模板片段添加到 snippets 目录中,比如添加文件 _header.liquid,在其他文件引用: {% render 'header' %}

模板文件添加到 templates 目录中,比如添加文件 blog.liquid

模板代码

每个模板的页内代码由 HTML ( CSS/JS ) + Liquid 组成,以下是模板首页代码示例:index.liquid

{% assign pages = site.pages['/'].children_in_list %}

 <div class="overflow-visible h-auto pb-[70px] min-h-screen bg-slate-100"> <div class="max-w-5xl mx-auto relative flex flex-col sm:flex-row sm:space-x-2 px-3 sm:px-0 pt-[220px]"> <div class="w-full space-y-2 lg:space-y-4 -mt-[60px]"> {% paginate_tag pages, per: 6 %} {% for page in pages %} {% render "card", page: page %} {% else %} {{ 'generic.empty' | t }} {% endfor %} {% render 'paginate', paginate: paginate %} {% endpaginate_tag %} </div> <!-- Sidebar Section --> <aside class="hidden w-64 pl-4 sm:block shrink-0"> {% render 'sidebar', site: site %} </aside> </div> </div> {% schema %} { "name": "Index", "description": "Card Style", "thumb_url": "images/theme/index-card.png", "sub_page_templates": ["page"] } {% endschema %} 

自定义模板字段

如果需要自定义模板页面的字段,则只需要做模板页面的 schame 中声明即可。

"settings": [ { "id": "tags", "type": "tag_picker", "multiple": true, "label": "标签" }, 

Baklib 支持 18+ 动态表单(见 https://dev.baklib.cn/2a32/forms),足以满足各种类型字段的自定义。

]]> 我回来了, Ruby on Rails tag:www.v2ex.com,2024-08-03:/t/1062335 2024-08-03T20:46:09Z 2024-08-21T13:29:50Z WildCat member/WildCat https://blog.wildcat.io/2024/08/i-m-back-rails-zh/ ]]> Ruby on Rails 国内使用情况 tag:www.v2ex.com,2024-04-18:/t/1033505 2024-04-18T02:09:15Z 2024-04-23T02:55:32Z cxhello member/cxhello
  • Ruby on Rails 框架如何?
  • 现在学习是否还有必要?
  • 是否推荐工作中使用?
  • 欢迎各位 V 友前来探讨。

    ]]>
    推荐一个 Admin Panel tag:www.v2ex.com,2023-11-13:/t/991400 2023-11-13T03:29:51Z 2023-11-19T15:10:16Z dw2693734d member/dw2693734d Rails 写的,基本上做到了 no code 和强灵活性

    适合自己的项目之上做集成

    https://github.com/motor-admin/motor-admin

    ]]>
    当我更换 mac m2 芯片 无法使用使用 mysql2 报错 symbol not found in flat namespace (_mysql_affected_rows) tag:www.v2ex.com,2022-09-03:/t/877398 2022-09-03T02:02:19Z 2022-09-03T02:49:19Z zzzzxl member/zzzzxl Rails 版本 7.0.3

    MySQL 版本 5.7.29

    Ruby 版本 3.1.1

    Rvm 版本 1.29.12

    mysql2 版本 ~> 0.5

    我的项目正在尝试迁移 m2 芯片,当我尝试运行rails s时 出现了以下错误

    `require': dlopen(/Users/list/.rvm/rubies/ruby-3.1.1/lib/ruby/gems/3.1.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle, 0x0009): symbol not found in flat namespace (_mysql_affected_rows) 

    我尝试过以下解决方案,都不能解决

    bundle config build.mysql2 "--with-ldflags=-L/usr/local/mysql/lib --with-cppflags=-I/usr/local/mysql/include" 
     gem install mysql2 -v '0.5' -- --with-mysql-cOnfig=/usr/local/mysql/bin/mysql_config --with-ldflags="-L/usr/local/mysql/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include 

    请问如何解决这个问题?

    ]]>
    后端收到两次重复 api 请求,如何判断第二次是重复的? tag:www.v2ex.com,2022-03-12:/t/839954 2022-03-12T16:02:08Z 2022-03-13T14:10:57Z gamesover member/gamesover 我们有个比较古老的 app ,前端是 ember ,后端是 rails

    以前一直都好好,最近遇到 2 次,后端收到貌似重复的 api post 请求

    除了请求的发送的时间不同,数据传过来是一模一样的

    后端有没有办法判断出是 chrome 自动把 api request 重复发送了一遍,有这种可能吗

    还是说用户又点了一次提交按钮

    但照理,提交按钮点一次后就 disable 了啊,实在不懂为什么会出现这种情况

    ]]>
    Rails 7 发布 tag:www.v2ex.com,2021-12-18:/t/823065 2021-12-18T17:09:19Z 2021-12-18T22:25:52Z Koell member/Koell
    https://rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision

    前端默认 importmap ,再也没有什么 npm 、node_modules ,搭配 hotwire 全家桶开启前端新体验。
    老传统加强版,从零制作一个带实时评论的博客
    ]]>
    大家写 ruby on rails applications 的时候一般怎么写前端页面? tag:www.v2ex.com,2021-12-12:/t/821750 2021-12-12T20:10:07Z 2021-12-13T01:53:38Z zzyyqq member/zzyyqq 是用 ror 自带的前端框架?
    还是再自己写一个 rn/angular/vue 前端应用然后让 ror 作为后台?
    谢谢

    ]]>
    如何动态显示和保存一系列输入框中的内容 tag:www.v2ex.com,2021-12-10:/t/821444 2021-12-10T15:52:09Z 2021-12-10T15:50:09Z zzyyqq member/zzyyqq hello

    想问一个关于 ror 上前台动态显示输入框个数的问题。 

    比如我指定一个数字 10, 那么前台就显示 10 个输入框,点击提交后,就把这是个用户输入的值发送给后台并作为 list 存储在本地.

    如果我指定一个数字 30 , 那么流程相同但是显示给前台三十个输入框。

    找了一圈好像没发现在 ror 上有什么比较简单的办法。

    还望赐教。多谢。

    ]]>
    ruby on rails: no implicit conversion of nil into String tag:www.v2ex.com,2021-10-10:/t/806875 2021-10-10T11:07:02Z 2021-10-10T12:52:41Z 0c0c0f member/0c0c0f class CveController < ApplicationController
    def index
    @cves = Cve.all
    end

    def show
    @cve = Cve.find_by(cve_id: params[:cve_id])
    end
    end


    异常信息
    Showing app/views/cve/index.html.erb where line #3 raised:

    no implicit conversion of nil into String
    Extracted source (around line #3):

    <h1>Cve#index</h1>
    <p>Find me in app/views/cve/index.html.erb</p>
    <% @cves.each do |cve| %>
    <tr>
    <td><%= cve.cve_id %></td>
    <td><%= cve.summary %></td>

    Rails.root: /Users/admin/RubyProjects/xx-api

    Application Trace | Framework Trace | Full Trace
    app/views/cve/index.html.erb:3
    Request
    Parameters:

    None
    Toggle session dump
    Toggle env dump
    Response
    Headers:

    None ]]>
    Rails 现在国内是不是有点凉了? tag:www.v2ex.com,2021-03-30:/t/766398 2021-03-30T02:28:19Z 2021-09-09T08:18:17Z pythonee member/pythonee Rails 6.1 升级记录 tag:www.v2ex.com,2020-12-16:/t/735974 2020-12-16T04:52:33Z 2020-12-16T05:21:09Z ChrisZou member/ChrisZou 期待已久的 Rails 6.1 终于发布了。趁着双休,给我的的小开源项目从 Rails6.0 升级到了 6.1,记录在此 https://chriszou.com/2020/12/16/geekweibo-upgrade-to-rails-6-1/

    ]]>
    使用 Vue 前端、Rails 后端实现图片上传的功能 tag:www.v2ex.com,2020-11-19:/t/727307 2020-11-19T14:19:39Z 2020-11-21T02:22:15Z ChrisZou member/ChrisZou 正文见 https://chriszou.com/2020/11/16/upload-image-using-vue-and-rails/
    核心方法是使用 formData 作为 ajax 的 body,之前主要不清楚的点在于 csrf token 的传递。
    当然,这里的方法可能不是最好的。如果哪位大神有更好的方法实现,还请不吝指教!

    ]]>
    写了个在线约会的日历,已经部署在公有云上了,正文有访问链接 tag:www.v2ex.com,2020-11-16:/t/725665 2020-11-16T02:36:37Z 2020-11-16T09:39:03Z wewin member/wewin 主要实现的功能:具有发布可会面时间权限的用户 A,登录系统发布可会面时间。与会者 B,登录系统从 A 发布的时间中选择自己可以参见会议的时间,这样就可以达成一个会议邀约。

    链接:http://www.calendar.com/

    测试账号:

    A 类用户:Yoyo / 123456 B 类用户:Ada / 123456

    ]]>
    Ruby, Rails 不值一学 tag:www.v2ex.com,2020-11-11:/t/723965 2020-11-11T04:12:49Z 2021-01-26T01:08:31Z coool member/coool

    这是前两天开的帖:t/723318

    我的工作是 Go 开发,因为总听说 Ruby 、Rails 很吊,所以业余打算学学,选了《 Agile web development with Rails 6 》一书看的,折腾了 3 天准备放弃了,真的不值一学。

    如果一项编程语言的入门,大量时间要花到折腾环境、各种乱七八糟的报错上而无法聚焦到语言、框架本身,那还谈什么提高?

    当初学 Go 也就小半天搭了环境就开始写了,Rails 整了 3 天,每天十个小时,到现在rails new demo都没跑起来,确切的说是没完全跑起来。

    安装 Ruby 、Rails就不说了,rails new demo各种报错,最后localhost:3000访问到了,但是自从执行 了bin/rails generate controller Say hello goodbye,历数我遇到的各种奇怪的报错,完全没有任何解决方案:

    node:internal/modules/cjs/loader:903 throw err; ^ Error: Cannot find module 'webpack-cli/bin/config-yargs' Require stack: 

    官方 github issure 各种说版本问题,还让在packge.json加了scripts:代码,换成webpack serve啥的,没点用,我就奇怪了前端圈各种软件库啥的升级从来不考虑向后兼容吗?约定的命令说改就改,改了还没啥用,解决不了旧问题还制造一堆新问题。github 、stack overflow 、csdn 之流都没有任何解决方案:https://github.com/webpack/webpack-dev-server/issues/2759, https://blog.csdn.net/Piconjo/article/details/105744808


    …………
    ……………………
    ………………………………

    $ bin/rails about About your application's environment Rails version 6.0.3.4 Ruby version ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin19] RubyGems version 3.1.4 Rack version 2.2.3 Middleware Webpacker::DevServerProxy, ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::ActionableExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, ActionDispatch::ContentSecurityPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper Application root /Users/coool/ruby/work/demo Environment development Database adapter sqlite3 Database schema version 0 

    package.json文件是这样的

    { "name": "demo", "private": true, "dependencies": { "@rails/actioncable": "^6.0.0", "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.0", "turbolinks": "^5.2.0", "webpack": "^5.4.0" }, "scripts": { "serve": "webpack serve" }, "version": "0.1.0", "devDependencies": { "webpack-cli": "^4.2.0", "webpack-dev-server": "^3.11.0" }, "babel": { "presets": [ "./node_modules/@rails/webpacker/package/babel/preset.js" ] }, "browserslist": [ "defaults" ] } 

    可能 Rails 确实是殿堂级的框架,但是这个框架的门槛在云上,我在地上上不去……各种环境、升级、代理设置、global 翻墙都没用、版本不兼容、乱七八糟的报错,是我在写 Go 的时候从来没有遇到过的。

    另外吐槽一下 Ruby-China 真的……不知道有多少人的耐心是 7 天,反正我这三天,每天十几个小时的折腾这些报错已经耗尽了耐心,放弃了。

    ]]>
    Rails new 命令一直转圈怎么办? tag:www.v2ex.com,2020-11-09:/t/723318 2020-11-09T10:47:01Z 2020-11-23T12:11:48Z coool member/coool 大佬们,执行rails new demo命令时到下面这里一直在转圈,很久也不往下走,求指点:

    warning @rails/webpacker > webpack > watchpack > watchpack-chokidar2 > chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies. warning @rails/webpacker > webpack > watchpack > watchpack-chokidar2 > chokidar > fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2. warning @rails/webpacker > webpack > micromatch > snapdragon > source-map-resolve > resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated warning @rails/webpacker > webpack > micromatch > snapdragon > source-map-resolve > urix@0.1.0: Please see https://github.com/lydell/urix#deprecated [2/4] 🚚 Fetching packages... [3/4] 🔗 Linking dependencies... [4/4] 🔨 Building fresh packages... [-/3] ⠂ waiting... [-/3] ⠂ waiting... [3/3] ⠂ node-sass 

    就是最后三行,一直在转圈:

    [-/3] ⠂ waiting... [-/3] ⠂ waiting... [3/3] ⠂ node-sass 

    已经用下面这两个命令换了代理:

    gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ bundle config mirror.https://rubygems.org https://gems.ruby-china.com 
    ]]>
    大家都用什么来部署 ROR 的? tag:www.v2ex.com,2020-02-06:/t/642476 2020-02-06T03:55:46Z 2020-02-09T11:45:15Z xiqingongzi member/xiqingongzi ruby on rails 做 web 开发,效率真是杠杠的啊 tag:www.v2ex.com,2020-02-05:/t/642414 2020-02-05T15:44:38Z 2020-09-05T19:29:32Z diegobona member/diegobona 最近宅在家好好用了一下,真的是无以言表啊。 代码量 优雅的语法 ...... 不多说了,谁试谁知道。

    ]]>
    如果有一天 DHH 没有再维护 ror 了怎么办? tag:www.v2ex.com,2019-07-04:/t/579947 2019-07-04T04:29:55Z 2019-07-05T23:59:46Z charlie21 member/charlie21 https://mvnrepository.com/artifact/org.springframework.roo/org.springframework.roo.addon.web.mvc.jsp

    这是一个红极一时的 Java Spring Framework 的插件,提供了 ROO shell,几乎是完全照搬 ror 的思路

    但是 它的最后更新日期是 2015。简单的说就是它死了。使用它的开发者活跃在 2010 ~ 2016 年;也就是 在它不再更新之后的一年之内,整个盘子的命运就是人走茶凉 ( 而且 对于 roo 的原创者而言其实是没有任何损失的吧,他不用对 roo 负责,他说不写就不写了 他说不更新了那就不更新了,除非他能专门招聘招来人替他写 ( 成立一个公司 写 roo 盈利 招人 写 roo 盈利 扩招,保持 roo 的不死 ),但是他没有。结果就是 roo 它死了 和 整个盘子的人走茶凉。roo 的开发者圈子也就散了 )。

    那么我就要问了,如果有一天 DHH 没有再维护 ror 了怎么办?

    ( 这是一个假设性问题。乐意谈呢就在这个假设下谈,谢谢,不喜欢谈谈这个假设那就别谈,把它留给想谈的人 )

    ]]>
    Ruby on Rails 怎么样? tag:www.v2ex.com,2019-05-10:/t/562742 2019-05-10T01:42:33Z 2019-05-15T05:47:32Z leelds member/leelds 有没有小伙伴用过(实际开发过 1 一年以上的),本人想入坑 入坑前总是有点小忐忑,所以。。。

    ]]>
    世界无人帆船锦标赛,招募两名 Ruby 志愿者的参与 tag:www.v2ex.com,2019-04-06:/t/552602 2019-04-06T16:34:46Z 2019-04-07T10:51:12Z tsaoyu member/tsaoyu 各位 Ruby 开发者大家好,

    我们是第 12 届世界无人帆船锦标赛的组委,今年我们首次将这项国际型的赛事带到了中国举办。本地比赛会由浙江大学在浙江省宁波市举办,届时世界各地的无人帆船参赛队伍会在中国参与角逐今年的各个奖项。

    作为开源世界的爱好者以及持续贡献者,我们组委会每年都会与当地的开源爱好者一起,共同完成兼具趣味性与竞技性的各项挑战。船舶追踪系统作为赛事的核心系统,在每年的比赛中的实时赛果展示和赛后自动评分中都起到了重要的作用。今年在中国的比赛中,我们希望继续开展和当地爱好者的合作,在以下几个领域中进一步优化船舶追踪系统。其中主要的工作内容有两个方面:

    服务器端:

    移动端:

    如果你有兴趣参与到我们中间来,请发送邮件到 tsaoyu at gmail dot com

    GitHub Repository at https://github.com/WRSC/tracking

    ]]>
    正在看 restful rail development 这本书,按照书上写的测试报错了,大佬帮我看看 tag:www.v2ex.com,2018-12-16:/t/518075 2018-12-16T12:43:49Z 2018-12-16T13:09:25Z Caojx member/Caojx require 'test_helper'

    class SayControllerTest < ActionDispatch::IntegrationTest
    test "should get hello" do
    get say_hello_url
    assert_response :success
    end
    test "should say hello in json" do
    get say_hello_url
    assert_equal "{\"hello\":\"Rails!\"}", @response.body
    end
    test "should say hello in json" do
    get say_hello_url,{'user'=>"Join"}
    assert_equal "{\"hello\":\"Join!\"}", @response.body
    end
    end ]]>
    spree 电商框架怎么样 tag:www.v2ex.com,2018-08-27:/t/483731 2018-08-27T10:23:44Z 2018-08-27T10:20:44Z versionzhang member/versionzhang 最近在研究 rails 下的 spree 电商框架,有没有 v 友使用过,分享一下使用经验或者心得,谢谢

    ]]>
    送几本《Rails 5 敏捷开发》 tag:www.v2ex.com,2018-02-24:/t/432147 2018-02-24T03:13:31Z 2018-02-25T04:34:08Z Andor_Chen member/Andor_Chen Rails 5 敏捷开发

    《 Agile Web Development with Rails 5 》一书的中文版已于年前上市!

    本书由华中科技大学出版社引进,感谢出版社和编辑对 Ruby/Rails 的关注!本书由我和 chinakr 合译,感谢 chinakr 的辛勤!本书由大疆 Ruby 技术团队审校,特此感谢!


    《 Rails 5 敏捷开发》荣获 Jolt 技术图书大奖。本书以讲解“购书网站”案例为主线,逐步介绍 Rails 的内置功能。全书分为 3 部分,第一部分介绍 Rails 的安装、应用程序验证、Rails 框架的体系结构,以及 Ruby 语言知识;第二部分用迭代方式构建应用程序,然后依据敏捷开发模式开展测试,最后用 Capistrano 完成部署;第三部分补充日常实用的开发知识。本书既有直观的示例,又有深入的分析,同时涵盖了 Web 开发各方面的知识,堪称一部内容全面而又深入浅出的佳作。第 5 版增加了关于 Rails 5 和 Ruby 2.2 新特性和最佳实践的内容。


    好了,重点来了。熟悉我的读者知道,每逢我翻译的书上市,我都会搞个赠书活动,这一次也不例外。年前已经送出一波,年后再来一波。

    请扫描图中二维码,或者长按图片,识别图中二维码参与此次活动。


    活动细节:


    补充链接:

    ]]>
    Rails 布署最佳实践 tag:www.v2ex.com,2017-12-28:/t/418224 2017-12-28T03:13:31Z 2017-12-29T02:01:49Z rina member/rina 准备工作

    本文介绍的内容为:服务器 ubuntu16.04, Rails 项目,mina 发布

    安装 rails 环境

    adduser newuser 

    设置新用户密码

    配置 ssh

    在本地生成 SSH KEY (如果已经有了,可以忽略这步。)

    $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 

    生成完之后,在 ~/.ssh/ 目录下会添加两个文件,默认情况下一个私钥 id_rsa, 一个公钥 id_rsa.pub.

    配置无密码登录服务器

    这一步是为了给 mina 发布提供方便,因为 mina 发布需要无密登录服务器,执行发布命令。

    $ scp ~/.ssh/id_rsa.pub root@your.domain.com:~/.ssh/ $ ssh root@your.domain.com $ cd ~/.ssh/ $ cat id_rsa.pub >> authorized_keys $ rm id_rsa.pub 
    ssh root@your.domain.com 

    以上是配置 root 用户无密码登录, 同样给 newuser 用户配置成无密码登录。

    vi /etc/ssh/sshd_config 更新: PasswordAuthentication no 

    为了确保能顺利安装 Rails,先要安装 Node.js 和 Yarn 的系统依赖

    以下操作使用 root 账号执行

    curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev nodejs yarn 

    安装 rbenv

    以下操作使用 newuser 账号执行

    cd git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec $SHELL git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc exec $SHELL rbenv install 2.4.3 rbenv global 2.4.3 ruby -v 
    gem install bundler rbenv rehash 

    配置 git 账号

    以下操作使用 newuser 账号执行

    git config --global color.ui true git config --global user.name "YOUR NAME" git config --global user.email "YOUR@EMAIL.com" ssh-keygen -t rsa -b 4096 -C "YOUR@EMAIL.com" 

    在服务器上生成了 ssh key 后, 将下面命令输入的内容,复制后粘贴到你 github 账号SSH and GPG keys下:https://github.com/settings/keys

    cat ~/.ssh/id_rsa.pub 
    ssh -T git@github.com 

    如果成功会输出以下信息:

    Hi kfzyutc! You've successfully authenticated, but GitHub does not provide shell access. 

    安装 Rails

    $ gem install rails -v 5.1.4 $ rbenv rehash $ rails -v # Rails 5.1.4 

    安装 MySQL

    sudo apt-get install mysql-server mysql-client libmysqlclient-dev 

    安装 PostgreSQL

    sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list" wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get install postgresql-common sudo apt-get install postgresql-9.5 libpq-dev 

    postgres 安装不会为你设置一个用户,所以你需要按照以下步骤创建一个有权创建数据库的用户。 随意用你的用户名替换 chris

    sudo -u postgres createuser chris -s # If you would like to set a password for the user, you can do the following sudo -u postgres psql postgres=# \password chris 

    配置 nginx

    upstream RBlog { server unix:///home/newuser/xxx/shared/tmp/sockets/puma.sock fail_timeout=0; } server { listen 80; server_name example.com; root /home/newuser/xxx/current/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } location /cable { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://xxx; } location ~ ^/(uploads)/ { expires max; break; } try_files $uri/index.html $uri @RBlog; location @xxx { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_pass http://xxx; } error_page 500 502 503 504 /500.html; client_max_body_size 20M; keepalive_timeout 10; } 
    nginx -t # nginx: the configuration file /etc/nginx/nginx.conf syntax is ok # nginx: configuration file /etc/nginx/nginx.conf test is successful 
    nginx -s restart 

    发布 Rails 项目

    如果你是用这个 模板 创建的 Rails 项目, 以下配置信息都已经添加了,只需要更新目录信息就行。

    如果没有需要在 Gemfile 里添加这些 gem 包。

    gem 'mina', '~>0.3.8', require: false gem 'mina-puma', '~>0.3.2', require: false gem 'mina-multistage', '~> 1.0', '>= 1.0.2', require: false gem 'mina-sidekiq', '~> 0.3.1', require: false gem 'mina-logs', '>= 0.1.0', require: false gem 'whenever', :require => false 

    在你的 Rails 项目下配置 puma,config/puma.rb, 替换 /home/newuser/xxx 目录.

    if ENV['RAILS_ENV'] == 'production' app_root = "/home/newuser/xxx/shared" pidfile "#{app_root}/tmp/pids/puma.pid" state_path "#{app_root}/tmp/pids/puma.state" bind "unix://#{app_root}/tmp/sockets/puma.sock" activate_control_app "unix://#{app_root}/tmp/sockets/pumactl.sock" daemonize true workers 4 threads 8, 16 preload_app! on_worker_boot do ActiveSupport.on_load(:active_record) do ActiveRecord::Base.establish_connection end end before_fork do ActiveRecord::Base.connection_pool.disconnect! end else plugin :tmp_restart end 

    配置 deploy, config/deploy.rb

    set :stages, %w(production staging utcprod) set :default_stage, 'staging' require 'mina/multistage' require 'mina/bundler' require 'mina/rails' require 'mina/git' require 'mina/rbenv' require 'mina/puma' require "mina_sidekiq/tasks" require 'mina/logs' require 'mina/whenever' set :shared_paths, ['config/database.yml', 'config/newrelic.yml', 'config/application.yml', 'log', 'public/uploads'] task :environment do invoke :'rbenv:load' end task :setup => :environment do queue! %[mkdir -p "#{deploy_to}/shared/tmp/sockets"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/tmp/sockets"] queue! %[mkdir -p "#{deploy_to}/shared/pids"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/pids"] queue! %[mkdir -p "#{deploy_to}/shared/tmp/pids"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/tmp/pids"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/public/uploads"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/public/uploads"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"] queue! %[touch "#{deploy_to}/#{shared_path}/config/application.yml"] queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/application.yml'"] queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"] queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml'"] end desc "Deploys the current version to the server." task :deploy => :environment do queue %[echo "-----> Server: #{domain}"] queue %[echo "-----> Path: #{deploy_to}"] queue %[echo "-----> Branch: #{branch}"] deploy do invoke :'sidekiq:quiet' invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' invoke :'rails:db_migrate' invoke :'rails:assets_precompile' invoke :'deploy:cleanup' to :launch do invoke :'puma:hard_restart' invoke :'sidekiq:restart' invoke :'whenever:update' end end end desc "Deploys the current version to the server." task :first_deploy => :environment do queue %[echo "-----> Server: #{domain}"] queue %[echo "-----> Path: #{deploy_to}"] queue %[echo "-----> Branch: #{branch}"] deploy do invoke :'git:clone' invoke :'deploy:link_shared_paths' invoke :'bundle:install' invoke :'deploy:cleanup' to :launch do invoke :'rails:db_create' end end end 

    config/deploy/production.rb,将 domain, deploy_to, repository, branch, user 替换成你自己的信息。

    set :domain, 'your.domain.com' set :deploy_to, '/home/newuser/xxx' set :repository, 'git@github.com:xxx/xxx.git' set :branch, 'master' set :user, 'newuser' set :puma_config, ->{ "#{deploy_to}/#{current_path}/config/puma/production.rb" } 

    这些配置信息更新好之后,提交到 github

    首次发布

    mina setup mina first_deploy 

    后续发布

    mina deploy 

    本地查看生产环境日志

    mina log 

    本地登录生产环境数据库控制台

    mina console 

    本地登录服务器

    mina ssh 

    参考文档

    Ubuntu 安装 Rails 环境: https://gorails.com/setup/ubuntu/16.04

    Mina 配置: https://github.com/80percent/rails-template

    原文: http://liuzhen.me/articles/17

    ]]>
    Rails Seed Migration 问题 tag:www.v2ex.com,2017-09-19:/t/392120 2017-09-19T19:57:35Z 2017-09-20T02:25:38Z final0pro member/final0pro 组里同事之前写的 seed migration file, 往一个 table X 里添加了一系列数据。

    半年之后,另外一个同事在 Object X 里加入了 validation

    这样就会导致,在本地我重新从头执行脚本 rake db:drop; rake db:create; rake db:migrate;,就会因为之前的 seed 文件在添加数据的时候会调用 validation,然后却失败了

    什么才是正确的方法写 seed migration。禁止一切 callback 吗?

    谢谢

    ]]>
    心好累 ruby 发一个 OAuth1.0 的请求怎么这么难 tag:www.v2ex.com,2017-07-31:/t/379215 2017-07-31T04:39:49Z 2017-07-31T06:39:33Z vzyw member/vzyw 1.用 postmen 自带的 oauth1.0 功能可以请求成功
    2.用自己写的签名方法 get 请求可以成功
    3.用自己写的签名方法 post 可以成功
    但是带 body 参数的 post 死活认证失败 ,我是不是遗漏了什么东西 或者什么东西没考虑到 ]]>
    Ruby on Rails 的工程怎么做 heap dump? tag:www.v2ex.com,2017-07-13:/t/374959 2017-07-13T01:28:09Z 2017-07-13T01:56:19Z xudzhang member/xudzhang 最近起了 sidekiq 后,进程的内存持续飙升……

    ]]>
    为什么是 Ruby on Rails?而不是 Rails on Ruby? tag:www.v2ex.com,2017-06-21:/t/370022 2017-06-21T04:15:24Z 2017-06-22T01:29:47Z liteyou member/liteyou Turbolinks 会导致微信网页在 iOS 上点击链接时出现 invalid signature 错误, Android 和开发者工具则正常 tag:www.v2ex.com,2017-06-20:/t/369715 2017-06-20T01:39:34Z 2018-02-16T19:04:35Z WildCat member/WildCat 最近在做微信网页开发,用的是 wechat 这个 gem。iOS 上,目前生成的网页,首页没问题,一旦点击一次链接就会出现 invalid signature 错误。

    搜索了很多相关关键词,甚至关于 React 的微信网页开发的。都没找到什么可以利用的资料。 很想用 turbolinks,但是现在看来只能关闭了。奇怪的是为什么 Android 正常 iOS 不正常,按理说 iOS 的浏览器应该更稳定才对。

    ]]>
    ruby on rails 如何上传 swf 文件 tag:www.v2ex.com,2017-05-09:/t/360011 2017-05-09T00:45:43Z 2017-05-09T05:09:09Z fengjianzhi member/fengjianzhi 想做个动图网站,gif 格式的文件太大,swf 更省空间,请问用什么 gem 上传

    ]]>
    球写一段及其简单的 Ruby 代码 tag:www.v2ex.com,2016-12-08:/t/326236 2016-12-08T09:20:29Z 2016-12-08T22:51:34Z wadezhao member/wadezhao 用 Redmine 管理项目,是 Ruby 写的, Ruby 貌似在 Windows 下处理中文编码有点问题,导致 Redmine 中一些中文文件名的图片显示不正常,我找到解决方法但是不懂 Ruby ,请求帮忙。

    需求很简单,下面这个函数是对字符串进行处理,处理后的字符串差不多是这样: /attachments/download/455/02%E5%AE.jpg 我想把最后一个“/”后面的字符删除,就是返回是 /attachments/download/455/ 应该很简单吧,函数如下:

    def htmlesc( str, mode=:Quotes ) if str str.gsub!( '&', '&amp;' ) str.gsub!( '"', '&quot;' ) if mode != :NoQuotes str.gsub!( "'", '&#039;' ) if mode == :Quotes str.gsub!( '<', '&lt;') str.gsub!( '>', '&gt;') end str end 
    ]]>
    初学者请教一个 ruby 使用 leveldb 的问题 tag:www.v2ex.com,2016-11-29:/t/324148 2016-11-29T09:15:47Z 2016-11-29T10:12:47Z larkifly member/larkifly 问题:当我在文件加上 require "leveldb" 就开始报错:

    .rvm/gems/ruby-2.3.0/gems/mongo-2.2.4/lib/mongo/protocol/message.rb:97:in `serialize': uninitialized constant BSON::ByteBuffer (NameError)

    当我去掉 require "leveldb",就正常了。
    请问这个问题怎么修复了?

    ps :我已经尝试在 Gemfile 里加 gem bson ,没有用 ]]>
    Rails 本地开发,访问网站巨慢,你们都是怎么解决的? tag:www.v2ex.com,2016-11-22:/t/322531 2016-11-22T20:33:16Z 2017-02-03T23:15:46Z starvedcat member/starvedcat
  • 点一个链接,要等 20 秒左右才打开。。。。
  • 玩具 APP 也巨慢,不是代码问题
  • 本地开发 Java PHP 网页都是秒开,不是性能问题
  • 部署到远程( Heroku ),点链接都是秒开 已经尝试了网上说的一些方法,比如改 config\environments\development.rb ,把 cache 都打开。然而并没有显著的改善!!
  • 求助了

    ]]>
    RESTful API 设计问题(很基础) tag:www.v2ex.com,2016-11-20:/t/321968 2016-11-20T23:15:18Z 2016-11-21T08:43:26Z starvedcat member/starvedcat 我现在有

    resources :books 

    现在我想要设计 API ,显示同一个作者写的所有书

    假设, ID 为 1 的书,作者是 A ,这本书的 URI 是

    /books/1 

    那么这个“ A 写的所有书”的 URI 应该怎么设计呢?

    这个“作者”就是一个字符串,不是一个 model

    是不是这样:(用 similar 表示同一个作者)

    /books/1/similar 

    但是这样的话,又没有体现出 A 的名字

    ]]>
    ruby 中使用类变量是 bad code style 吗?有没有替代品? tag:www.v2ex.com,2016-11-20:/t/321967 2016-11-20T20:43:17Z 2016-11-21T04:37:53Z starvedcat member/starvedcat 我现在想给一个类添加一个字符串类变量,但 RubyMine 提示我说不要用 class variable

    那应该用什么方法实现这个目的呢?

    ]]>
    jenkins 执行 ruby -v 和在 slave 上执行 ruby -v 版本不一致 tag:www.v2ex.com,2016-10-24:/t/315170 2016-10-24T15:51:02Z 2016-10-25T01:12:46Z louzhumuyou member/louzhumuyou 配置的 jenkins 是 master 和 slave 的形式, slave 是一台 mac mini,问题的引起是因为执行了

    sudo remove ruby 2.2.0 rvm use system 

    然后就出现的现象就是 jenkins 上打印 ruby -v 的版本是 2.2.0 ,本地 slave 上执行 ruby -v 的版本是 2.3.1 , 但是同样执行 rvm list 都是 ruby 2.3.1 , jenkins 上和 slave 上打印的 ruby 版本不一致,导致很多基于 ruby 安装的命令不能用。 求懂行的指教,问题该如何解决,我希望是 jenkins 上执行 ruby -v 的版本跟 slave mac 上命令行执行的结果应该是一致。 能想到的是jenkins是用基于ssh命令的方式登录的,本地命令行直接打开,所以登录方式是不一致的?

    ]]>
    Tower,Worktile,Teambition 在低层存储上的差别是什么? tag:www.v2ex.com,2016-10-24:/t/315003 2016-10-24T05:42:05Z 2016-10-24T09:02:10Z jiangbianwanghai member/jiangbianwanghai 它们三个都是基于 Pyhton 或 Ruby 开发的吗?为什么不用 Php? 在低层存储上他们是用的什么?是否采取了第三方的云解决方案呢?

    ]]>
    良心之作,全站工程师的独白 [视频] tag:www.v2ex.com,2016-10-16:/t/313217 2016-10-16T18:03:34Z 2016-10-17T08:56:02Z Byronlee member/Byronlee 一个全站工程师,应该有哪些正确的技术路线? 应该有哪些正确的姿势?
    应该如何选择自己的道理?

    答案在每个人的心中

    应该进入角色

    在这个充满雾霾的夜晚 坐在屋里小小的书桌旁 回想着一切 从当初决定做这件事, 到调研,到产品,到设计,到开发,到上线,这一切真所谓饱经风霜 在这个内容泛滥的年代,什么样的内容产品才适合我们? 要解决一个什么样的问题? 如何解决? 这是我这半年内心自问频率最多的问题

    今天它终于有了一个完美的答案

    他是什么

    安静地脑补 主旨从互联网信息红海中收录热点,经典的视频资源。目标用户主要针对互联网人群, 视频内容涵盖人们时常关心的领域,他们主要包含:电影、创业经验分享、融资、大会视频、线下活动、专业技能、编程、短视频、热点、科技、企业品牌、搞笑、教育、生活等。 安静的脑补同时也是新一代 CGC 视频内容分发平台,这里收录了互联网人关注的海量视频,采用领先的数据分析技术, 真正的做到:世界的精彩,安静地脑补。

    应该来点干货, 让我们通过一个短片,一起领略一下吧 [遗憾这里不能正确插入视频]

    官网链接: http://anjingdenaobu.com?utm_source=ruby-china

    播放链接 1 : http://v.qq.com/x/page/h0336p7uc1k.html

    播放链接 2 : http://anjingdenaobu.com/p/5006870.html?utm_source=next_comment

    加入讨论

    交流群

    欢迎各位小伙伴来吐槽 或者交流

    ]]>
    有没有人用个人电脑+花生壳+RoR,在家搭建一个自己的服务器? tag:www.v2ex.com,2016-10-10:/t/311636 2016-10-10T07:36:10Z 2016-10-15T17:13:14Z venson member/venson 之前已经可以写一些简单的东西了,现在发现都忘完了,有没有类似经历的同学?怎么破? tag:www.v2ex.com,2016-08-28:/t/302280 2016-08-28T08:51:06Z 2016-09-05T11:30:45Z XuanYuan member/XuanYuan 视频推荐:使用 Rails 5 开发一款 Ruby on Rails app tag:www.v2ex.com,2016-07-05:/t/290513 2016-07-05T14:19:47Z 2016-07-05T10:19:47Z livedutvchina member/livedutvchina 一个法国的程序员正在开发这款 APP 。据介绍,这个 APP 用作支持商业会员卡的管理系统。会员可以查询他们的账号以及各种优惠信息。

    https://www.livecoding.tv/aeradriel/videos/4Oo5J-ruby-on-rails-app-using-rails-5-7

    ]]>
    Ruby on Rails 教程(原书第 4 版)发布 tag:www.v2ex.com,2016-07-02:/t/289837 2016-07-02T10:34:50Z 2016-08-27T07:06:50Z Andor_Chen member/Andor_Chen

    Rails 5 发布了,发现 V 站有几贴在讨论相关话题,我也凑个热闹。

    经过一个多月的修订,《 Ruby on Rails 教程(原书第 4 版)》正式发布了

    第 4 版与第 3 版的主要变化有:

    第 4 版的电子书已经开始销售,上线首周八折优惠,请点击下述两个链接中的一个购买:

    英文版需要重新购买,但是我决定:第 3 版的老读者可以免费升级到第 4 版。如果你之前购买过第 3 版,请查收邮件,里面有第 4 版的下载链接。

    这是我开始翻译《 Ruby on Rails 教程》以来的第四个版本(之前几版都可以免费在线阅读),在此过程中得到了众多读者的大力支持,再次感谢你们!

    ]]>
    一个美女程序员开发的 Rails App tag:www.v2ex.com,2016-07-02:/t/289804 2016-07-02T07:15:21Z 2016-07-27T15:31:33Z livedutvchina member/livedutvchina 这个软件是由一个美女开发的,是一个用来管理学生的 APP 。视频已经超过 16000 次点击了。女生编程不比男生逊色。

    Building a Rails app for managing students https://www.livecoding.tv/pinklily/videos/ZDMQK-building-a-rails-app-for-managing-students-2

    ]]>
    需要长期运营的项目,千万别用 rails tag:www.v2ex.com,2016-07-02:/t/289785 2016-07-02T04:26:09Z 2016-07-30T17:45:52Z lianghudou member/lianghudou
    我 13 年做了个项目,用的当时最新的 rails3.2 。现在转服务器,不知道那个 gem 依赖了 eventmachine ,并且必须是 1.0.0 版的,为了兼容这个 1.0.0 版,不得不用 ruby 2.0.0 ,但是,在这个低版本的 ruby 上, rake 已经罢工了,必须得 2.2.2 以上。

    其实我用的 gem 不算多, Gemfile 里满打满算也就 10 个左右。

    linux环境的跨度也不算大,仅仅从ubuntu12到ubuntu14,难以想象到ubuntu18、ubuntu20,这个项目还有没有继续运行的可能。

    如果你的 web 项目打算让它稳定运行 10 年以上, java 和 php 仍是最佳选择,那些新技术拿来玩玩就行了,别用生产环境。 ]]>
    Rails 出 5.0 了 tag:www.v2ex.com,2016-07-01:/t/289583 2016-07-01T05:29:12Z 2016-07-01T20:13:18Z kyrre member/kyrre Ruby/Rails 果然还是因为性能不行被大伙边缘化,看来不转不行了...... ]]> ruby 如何做 race conditions 测试? tag:www.v2ex.com,2016-06-28:/t/288754 2016-06-28T01:38:48Z 2016-06-28T01:35:48Z TangMonk member/TangMonk Michael Hartl - 《Ruby on Rails 教程》 在线电子书(第 3 版) tag:www.v2ex.com,2016-06-13:/t/285338 2016-06-13T04:51:19Z 2016-06-15T07:49:19Z qwerasdf member/qwerasdf https://www.railstutorial.org/
    http://railstutorial-china.org/

    在线阅读
    en
    https://www.railstutorial.org/book
    cn
    http://railstutorial-china.org/rails42/

    buy
    https://selfstore.io/products/189

    ref
    https://twitter.com/Andor_Chen/status/739784210236350465 ]]>
    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