这里是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 项目实践相关推荐

  1. 视频教程-Ruby on Rails打造企业级RESTful API项目实战我的云音乐-Ruby/Rails

    Ruby on Rails打造企业级RESTful API项目实战我的云音乐 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生 ...

  2. Ruby/Rails学习教程-Hello Ruby

    项目需要,我的Ruby之旅也开始了.学习之初必定是各种菜各种困惑,但是作为Developer,学习新知识是我们的基本技能.于是决定写点什么,来自我记录自己的成长轨迹. 从最初的Hello World ...

  3. Ubuntu上通过 RVM 安装 多版本 Ruby/Rails

    2019独角兽企业重金招聘Python工程师标准>>> Rails 3 RC 版半个月前就已经发布,而正式版据说会在未来几周内面世.相对于 2.3 版,Rails 3 差不多在各个方 ...

  4. 读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”...

    读<Node.js项目实践:构建可扩展的Web应用> --引编程慢慢变成系统化的"砌砖活" 眼里的Node.JS 初初接触node是一年前的事,那时候年少不更事.还在纠 ...

  5. SVM算法在项目实践中的应用!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:苏丽敏,Datawhale优秀学习者,北理工计算机硕士 支持向量机 ...

  6. SAP WM Storage Location Reference在项目实践中的使用

    SAP WM Storage Location Reference在项目实践中的使用 笔者目前所在的一个项目是一个已经上了SAP系统,但是需要扩展到新工厂的项目.该项目在组织结构设计的时候,结合业务的 ...

  7. 学习Unix,可从事什么样的工作(1)《精通Unix下C语言与项目实践》读书笔记(3)...

    <精通Unix下C语言编程与项目实践>读书笔记(new) 文章试读 不拘一个遍程序系列:编程序不能一个脑袋钻到底,有时要学会变通,即所谓的曲线救国.一.二.三.四 职场规划:一些杂七杂八的 ...

  8. Node.js项目实践:构建可扩展的Web应用

    2019独角兽企业重金招聘Python工程师标准>>> Node.js项目实践:构建可扩展的Web应用 <Node.js项目实践:构建可扩展的Web应用>用专业的讲解方式 ...

  9. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)

    精通Unix下C语言编程与项目实践 之动态库的生成 作者:朱云翔,胡平 3.3 动态库的生成 动态库的生成可分为三个步骤,设计库源码.编译位置无关码(PIC)型.o文件和链接动态库.链接动态库的命令包 ...

最新文章

  1. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~
  2. 印度软件业崛起的奥妙
  3. C++中参数传递的两种方式:传值与传址及它们的区别
  4. luogu1082 [NOIp2012]同余方程 (扩展欧几里得)
  5. Android开发文档
  6. 【论文】本体匹配实体对齐知识融合入门论文推荐
  7. WebForms简介
  8. 大数据解读剩女现象:谁遗忘了她们的爱情?
  9. idea关联本地的svn项目
  10. iOS 签名机制与证书
  11. 面试mysql索引底层_面试必备之MYSQL索引底层原理分析
  12. EDG:相信奇迹的人,本身就是奇迹。
  13. 全国计算机等级考试二级教程与资料
  14. html+css悬浮加速器
  15. UE4 如何开启 EQS
  16. Java中如何不用中间变量来使两个变量交换值
  17. C. Neko does Maths
  18. C++数据结构问题:线性表的数据元素右移
  19. 4G、5G RLC AM模式数据和控制报文格式的区别
  20. 《女医明妃传》里为美人腹黑的代宗,实际更爱江山,还原真实明史

热门文章

  1. dsp正弦波信号发生器c语言编程实例,毕业设计基于DSP的正弦波信号发生器的设计与实现整理版V3.1...
  2. 我的物联网项目(二十九) 线上前期运营
  3. 女性如何理解男人的性需求? 男性的性表达
  4. sa结构组网方式_SA和NSA这两种组网模式?哪个才是5G最佳选择?
  5. 基于Java实现的用于计算个人所得税的程序
  6. python 素数库_使用Python判断质数(素数)的简单方法讲解
  7. 程序员,在北上广深杭赚够100万,就逃回二三四线城市生活,靠谱吗?
  8. IBM V7000存储升级微码
  9. 中科院量子计算机芯片,超导量子计算云平台——机会再次来临
  10. Pytorch学习(二)—— nn模块