ruby rails + grape + sidekiq 项目实践
这里是ruby rails + grape + sidekiq的一段实践过程,新手过程,只作为一段记录;
1、ruby + rails
(1)搭建ruby rails 环境
Getting Started with Rails
(2)新建项目文件夹
rails news grape_test
此时在/usr/local/demo/目录下出现创建了项目文件夹grap_test;
(3)替换sqlite3为mysql
本地安装好mysql之后,再用gem安装mysql2适配器:
gem install mysql2
在gemfile文件中替换掉sqlite3:
# gem 'sqlite3'
gem 'mysql2'
# 替换掉sqlite3
然后修改config/database.yml中的参数:
# config/database.yml#
default: &defaultadapter: mysql2pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>timeout: 5000username: rootpassword: 'ur password'development:<<: *defaultdatabase: twi# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:<<: *defaultdatabase: twi_testproduction:<<: *defaultdatabase: twi_pro
安装和配置好之后运行rails s会报没有找到数据库的错误,所以需要将数据库创建和迁移:
> rake db:create> rake db:migrate
这之后的默认数据库就变成我们的mysql 了。
(4)安装grape
gem install grape
然后在gemfile中加入
gem 'grape'
(5)在application.rb中定义API文件所在的路径,然后grape会从routes入手读API对应的module和class,去application.rb定义的路径下寻找相应的module和class并执行其中的动作;
#application.rbrequire_relative 'boot'require 'rails/all'# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)module GrapeTestclass Application < Rails::Application# Initialize configuration defaults for originally generated Rails version.config.load_defaults 5.2# Settings in config/environments/* take precedence over those specified here.# Application configuration can go into files in config/initializers# -- all .rb files in that directory are automatically loaded after loading# the framework and any gems in your application.config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]end
end
#config/routes.rbRails.application.routes.draw do# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.htmlmount Twitter::API => '/'end
#api.rbmodule Twitterclass API < Grape::APIversion 'v1', using: :header, vendor: 'twitter'format :jsonprefix :apihelpers dodef current_user@current_user ||= User.authorize!(env)enddef authenticate!error!('401 Unauthorized', 401) unless current_userendendresource :statuses dodesc 'Return a public timeline.'get :public_timeline doStatus.limit(20)enddesc 'Return a personal timeline.'get :home_timeline doauthenticate!current_user.statuses.limit(20)enddesc 'Return a status.'params dorequires :id, type: Integer, desc: 'Status id.'endroute_param :id doget doStatus.find(params[:id])endenddesc 'Create a status.'params dorequires :status, type: String, desc: 'Your status.'endpost doauthenticate!Status.create!({user: current_user,text: params[:status]})enddesc 'Update a status.'params dorequires :id, type: String, desc: 'Status ID.'requires :status, type: String, desc: 'Your status.'endput ':id' doauthenticate!current_user.statuses.find(params[:id]).update({user: current_user,text: params[:status]})enddesc 'Delete a status.'params dorequires :id, type: String, desc: 'Status ID.'enddelete ':id' doauthenticate!current_user.statuses.find(params[:id]).destroyendendend
end
(6)测试
> rails s
浏览器输入: http://localhost:3000/
2、sidekiq异步处理
(1)安装redis(macOS)
brew install redis
(2)配置redis和sidekiq
config/initializers/sidekiq.rb# 初始化sidekiq和redis的配置redis_server = '127.0.0.1'
redis_port = 6379
redis_db_num = 0
redis_namespace = 'sik'Sidekiq.configure_server do |config|config.redis = { url: "redis://#{redis_server}:#{redis_port}/#{redis_db_num}", namespace: redis_namespace }
endSidekiq.configure_client do |config|config.redis = { url: "redis://#{redis_server}:#{redis_port}/#{redis_db_num}", namespace: redis_namespace }
end
config/sidekiq.yml:concurrency: 5 # 并发数
:pidfile: tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
- default
- [myqueue, 2]development:
:concurrency: 5
staging:
:concurrency: 10
production:
:concurrency: 20
(3)新建sidekiq异步任务
sidekiq -g sidekiq:worker Hard # will create app/workers/hard_worker.rb
# Hard_worker.rbclass HardWorkerinclude Sidekiq::Workerdef perform(name, count)# do somethingend
end
在API中添加异步运行的任务:
# api.rb...version 'v1', using: :header, vendor: 'twitter'format :jsonprefix :apiHardWorker.perform_async('bob', 5)helpers dodef current_user@current_user ||= User.authorize!(env)end...
(4)测试
rails s 打开rails ,然后新打开一个终端:
> sidekiq
(5)监控jobs的执行情况:
routes.rbrequire 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'
在浏览器中输入:http://localhost:3000/sidekiq/retries
待续...
ruby rails + grape + sidekiq 项目实践相关推荐
- 视频教程-Ruby on Rails打造企业级RESTful API项目实战我的云音乐-Ruby/Rails
Ruby on Rails打造企业级RESTful API项目实战我的云音乐 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生 ...
- Ruby/Rails学习教程-Hello Ruby
项目需要,我的Ruby之旅也开始了.学习之初必定是各种菜各种困惑,但是作为Developer,学习新知识是我们的基本技能.于是决定写点什么,来自我记录自己的成长轨迹. 从最初的Hello World ...
- Ubuntu上通过 RVM 安装 多版本 Ruby/Rails
2019独角兽企业重金招聘Python工程师标准>>> Rails 3 RC 版半个月前就已经发布,而正式版据说会在未来几周内面世.相对于 2.3 版,Rails 3 差不多在各个方 ...
- 读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”...
读<Node.js项目实践:构建可扩展的Web应用> --引编程慢慢变成系统化的"砌砖活" 眼里的Node.JS 初初接触node是一年前的事,那时候年少不更事.还在纠 ...
- SVM算法在项目实践中的应用!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:苏丽敏,Datawhale优秀学习者,北理工计算机硕士 支持向量机 ...
- SAP WM Storage Location Reference在项目实践中的使用
SAP WM Storage Location Reference在项目实践中的使用 笔者目前所在的一个项目是一个已经上了SAP系统,但是需要扩展到新工厂的项目.该项目在组织结构设计的时候,结合业务的 ...
- 学习Unix,可从事什么样的工作(1)《精通Unix下C语言与项目实践》读书笔记(3)...
<精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读 不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八的 ...
- Node.js项目实践:构建可扩展的Web应用
2019独角兽企业重金招聘Python工程师标准>>> Node.js项目实践:构建可扩展的Web应用 <Node.js项目实践:构建可扩展的Web应用>用专业的讲解方式 ...
- Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
精通Unix下C语言编程与项目实践 之动态库的生成 作者:朱云翔,胡平 3.3 动态库的生成 动态库的生成可分为三个步骤,设计库源码.编译位置无关码(PIC)型.o文件和链接动态库.链接动态库的命令包 ...
最新文章
- Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~
- 印度软件业崛起的奥妙
- C++中参数传递的两种方式:传值与传址及它们的区别
- luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
- Android开发文档
- 【论文】本体匹配实体对齐知识融合入门论文推荐
- WebForms简介
- 大数据解读剩女现象:谁遗忘了她们的爱情?
- idea关联本地的svn项目
- iOS 签名机制与证书
- 面试mysql索引底层_面试必备之MYSQL索引底层原理分析
- EDG:相信奇迹的人,本身就是奇迹。
- 全国计算机等级考试二级教程与资料
- html+css悬浮加速器
- UE4 如何开启 EQS
- Java中如何不用中间变量来使两个变量交换值
- C. Neko does Maths
- C++数据结构问题:线性表的数据元素右移
- 4G、5G RLC AM模式数据和控制报文格式的区别
- 《女医明妃传》里为美人腹黑的代宗,实际更爱江山,还原真实明史
热门文章
- dsp正弦波信号发生器c语言编程实例,毕业设计基于DSP的正弦波信号发生器的设计与实现整理版V3.1...
- 我的物联网项目(二十九) 线上前期运营
- 女性如何理解男人的性需求? 男性的性表达
- sa结构组网方式_SA和NSA这两种组网模式?哪个才是5G最佳选择?
- 基于Java实现的用于计算个人所得税的程序
- python 素数库_使用Python判断质数(素数)的简单方法讲解
- 程序员,在北上广深杭赚够100万,就逃回二三四线城市生活,靠谱吗?
- IBM V7000存储升级微码
- 中科院量子计算机芯片,超导量子计算云平台——机会再次来临
- Pytorch学习(二)—— nn模块