Rails

Ruby on Rails,链式调用order,limit,offset方法对条件查询结果进行整理

孤人 提交于 2020-03-10 18:15:27
在《 Ruby on Rails,使用where方法对持久化对象进行条件查询 》我们学习到可以通过where方法进行条件查询操作返回对象列表。 还有三个方法可以对返回的列表进行操作以便得到我们想要的结果集。 order方法对结果进行排序,比如将返回的对象按照名称升序排列、按照创建时间降序排列等。 limit方法对结果的数量进行限制,比如数据库中有成千上万的注册用户,我们不希望一下子把这些用户的信息都取出来,而是希望将这些用户分页显示,点击下一页才进行下一次读取。 limit方法读取第一页的N个用户,第二页需要返回的用户都需要将前面的N记录跳过,这里就用到了offset方法。 所以说,order;limit;offset方法配合使用就可以实现分页功能。 之前提到的find方法也有这三个功能比如,将所有Subject对象按照position的值升序排列后,跳过前面的40个,返回20条对象: Subject.find(:all, :order=> "position ASC", :limit => 20, :offset => 40) 前面提到了,find已经被where替代了,并已标注了不建议使用。所以记住以后要使用where配合三个独立方法哦! Subject.order("position").limit(20).offset(40)

进程fork情况下使用redis的问题

…衆ロ難τιáo~ 提交于 2020-03-09 19:09:58
在项目中碰到一个问题,以前一直好的程序,增加了些代码,突然爆redis异常: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking. 意思很明确,就是你fork了进程,子进程中的redis连接没法用了,要重连。但是为什么呢。 项目是rails的,一直没有问题,有独立跑的进程,这个进程会先加载rails环境,然后运行sneaker worker,错误就是在从sneaker worker里面爆出来的,在里面会使用配置在rails initializer里处使用的缓存工具。 缓存工具是同事写的第三方的gem包app_cache,在initializer里面初始化。 分析了前因后果,原因找到了,这个缓存工具初始化的时候就会连接redis,独立进程跑的时候就会加载并连接redis,然后这个进程fork子进程,子进程中如果继续使用这个连接就报错了。 但是我直接在sneaker worker里面重新设置缓存工具的redis连接,依然报错,这是为何,打开app_cache的源码,发现其连接创建的代码是: redis = Redis.current.nil? ? Redis.new(:url => options\[:url\]

Rails:include vs.:join

送分小仙女□ 提交于 2020-03-09 10:53:44
这更像是“为什么会这样做”这个问题,而不是“我不知道该怎么做”这个问题...... 所以关于拉你知道你将要使用的相关记录的福音是使用 :include 因为你将获得一个连接并避免一大堆额外的查询: Post.all(:include => :comments) 但是,当您查看日志时,没有发生加入: Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) 它 正在 采取一种捷径,因为它会立即提取所有注释,但它仍然不是连接(这是所有文档似乎都说的)。 我可以获得连接的唯一方法是使用 :joins 而不是 :include : Post.all(:joins => :comments) 日志显示: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "posts".id = "comments".post_id 我错过了什么吗? 我有一个有六个关联的应用程序,在一个屏幕上我显示所有这些数据。 似乎最好有一个加入查询而不是6个人。

RailsAdmin如何实现自定义操作

ぐ巨炮叔叔 提交于 2020-03-08 18:34:25
前言 做过Ruby开发或者更准确的说Ruby on Rails开发的同学,对RailsAdmin一定不会陌生。RailsAdmin可以快速的帮助您构建后台管理系统。丰富的gem集成以及便捷的搭建使得RailsAdmin成为web开发中必不可少的组成部分。另外通过RailsAdmin你也可以非常强烈的感受到敏捷开发的魅力所在,以及如何快速的帮助客户解决问题,快速搭建原型系统,满足客户需求。 RailsAdmin固然已经非常的便捷,但有时不能满足我们的需求,此时就需要我们自定义一些操作,扩展RailsAdmin的功能。 本文主要介绍在RailsAdmin中如何自定义操作(custom action),由于国内ruby及rails中文资料不是特别丰富,如果您从事ruby开发,那么本文可能对您会有一定的帮助。 总体思路 对于教程,我个人比较倾向的一种思路是,先介绍总体流程,让用户对其有个整体印象,然后详细的介绍每一步。这种方式使得用户能够非常轻松的接受,遇到问题如果出现问题也能很好的定位问题出现在哪一阶段。 我们如何在RailsAdmin中实现自定义操作呢? 主要有以下几个关键步骤: 定义和实现我们的操作并注册到RailsAdmin,让RailsAdmin能够知道该操作的存在; 定义该操作的前端显示页面; 在RailsAdmin配置文件中,使用该操作;

如何在rails中定义自定义配置变量

不羁岁月 提交于 2020-03-08 18:32:08
我想知道如何将自定义配置变量添加到rails应用程序以及如何在控制器中访问它们,例如我想能够在配置文件中定义upload_directory,例如development.rb并且能够在我的一个中访问它控制器。 其次我计划在我的应用程序中为上传提供S3支持,如果我想添加带有s3访问,密钥的yaml文件,如何在我的Rails应用程序中初始化它以及如何访问我定义的值在该配置文件中。 #1楼 如果您使用Heroku或者需要将您的应用程序设置保留为环境变量,那么 figaro gem非常有用。 #2楼 更新1 非常推荐:我现在正在使用 Rails Config gem进行精细控制。 UPDATE2 如果您想要快速解决方案,请查看下面的 Jack Pratt的答案 。 虽然我的原始答案仍然有效,但这个答案现在已经过时了。 我建议查看更新1和2。 原答案: 要快速解决方案,观看由Ryan Bates 演绎 的“YAML配置文件” 屏幕 应该会非常有帮助。 综上所述: # config/initializers/load_config.rb APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env] # application.rb if APP_CONFIG['perform_authentication']

【解决方案】阿里云服务器gitlab邮箱配置OpenTimeout: execution expired

走远了吗. 提交于 2020-03-08 16:40:45
一、问题原因: 阿里云服务器默认是屏蔽25端口的。改用163邮箱的465端口即可。 二、解决办法: gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_tls'] = true 来源: CSDN 作者: 明天争取 链接: https://blog.csdn.net/zpwangshisuifeng/article/details/104732209

Ruby 时间与日期

青春壹個敷衍的年華 提交于 2020-03-07 21:11:15
require 'rails' 表示在rails环境下使用, 可以在irb下进行操作。需要时通过 require 'rails'引入 在项目中直接运行 Rails c 就行了。 获取时间戳: Time.now.to_i 时间戳转时间: Time.at 1583581066 字符串转时间: Time.parse('2020-3-7 19:30:00') # 也可如下这样: "2020-3-7 19:30:00".to_time 时间转指定的字符串格式: Time.now.strftime("%Y-%m-%d %H:%M") 获取日期: Date.today 获取一个星期后的日期: Date.today + 7 获取一年后的日期: Date.today >> 12 获取一年前的日期: Date.today << 12 如果是从数据库中取出来的数据,可能是时间类,但是又需要转换日期的话,可以如下方法: year = current_user.created_at.year month = current_user.created_at.month day = current_user.created_at.day # 相当于字符串转日期 date = Date.new(year, month, day).strftime("%Y年%m月%d日") 天数递减: # 向前数5天 date =

如何在Heroku上快速度的创建一个项目

守給你的承諾、 提交于 2020-03-07 09:54:39
Heroku是用git来管理项目的,另外还要用到ssh来登录,这两个工具请自行安装。 要用Heroku,当然就要安装它了。 $ sudo gem install heroku 先要生成一个公钥,使用命令: $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: a6:88:0a:bb:74:70:c6:e0:d5:49:65:e3:04:d5:6c:3e user@workstation.local 把公钥加入到Heroku $ heroku keys:add Uploading ssh public key /home/user/.ssh/id_rsa.pub

GitLab在centos7上安装和使用

无人久伴 提交于 2020-03-07 07:46:27
git的优点 git是分布式的,svn不是 git分布式本地就可以用,可以随便保存各种历史痕迹,不用担心污染服务器,连不上服务器也能提交代码、查看log。 GIT分支和SVN的分支不同 分支在SVN中实际上是版本库中的一份copy,而git一个仓库是一个快照,所以git 切换、合并分支等操作更快速。 git有一个强大的代码仓库管理系统 - gitlab 可以很方便的管理权限、代码review,创建、管理project GitLab介绍 GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。 功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。对于软件工程质量管理非常重要。 版本:GitLab 分为社区版(CE) 和企业版(EE)。 配置:建议CPU2核, 内存2G 以上。 建议3G起 Gitlab的服务构成: Nginx:静态web服务器。 gitlab-shell:用于处理Git命令和修改authorized keys列表。(Ruby) gitlab-workhorse: 轻量级的反向代理服务器。(go) GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push

如何在Gemfile中指定本地gem?

廉价感情. 提交于 2020-03-05 15:08:58
我想要Bundler加载本地gem。 那有选择吗? 或者我是否必须将gem文件夹移动到.bundle目录中? #1楼 除了指定路径(如Jimmy所提到的),您还可以通过使用以下配置选项强制Bundler 仅为您的环境 使用本地gem: $ bundle config local.GEM_NAME /path/to/local/git/repository 如果您正在并行开发两个宝石或一个gem和一个rails应用程序,这将非常有用。 但请注意,这仅在您已经使用git作为依赖项时才有效,例如: # In Gemfile gem 'rack', :github => 'rack/rack', :branch => 'master' # In your terminal $ bundle config local.rack ~/Work/git/rack 正如 文档中 所见。 #2楼 如果您正在使用git,也可以使用git引用本地gem。 gem 'foo', :git => '/Path/to/local/git/repo', :branch => 'my-feature-branch' 然后,如果它改变了我跑 bundle exec gem uninstall foo bundle update foo 但我不确定每个人都需要运行这两个步骤。 #3楼