rails5 后台入门(api mode)
1. Installation (Centos为例)
1.1安装rvm (http://rvm.io/)
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB \curl -sSL https://get.rvm.io | bash -s stable
1.2安装ruby
rvm install 2.5.3
yum install ruby-dev
1.3 安装rails
gem install rails
2. Setup
2.1 初始化项目
rails new ProjectName --api ( --skip-bundle ) 跳过bundle安装
gemfile配置
gem 'mysql2' # 如果是pg安装'pg'
gem 'rack-cors'
安装: bundle install
2.2 配置数据库
/config/database.yml
default: &default
adapter: mysql2
pool:
username: root
password: pwdpwdpwd
host: localhost
charset: utf8
timeout: development:
<<: *default
database: databaseName test:
<<: *default
database: databaseName2 production:
<<: *default
database: databaseName3
2.3 配置cors
/config/application.rb
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'http://localhost:3000'
resource '*', :headers => :any, :methods => [:get, :post, :options,:put,:delete], :credentials=> true
end
end
2.4 配置session和cookie
! api模式默认不带
/config/application.rb
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
/app/controllers/application_controller.rb
include ActionController::Cookies
include ActionController::RequestForgeryProtection # 放最后
private
def set_csrf_cookie
cookies["CSRF-TOKEN"] = form_authenticity_token
end
3. 简单的用户认证和登录
3.1 创建模型
rails g model User username:string email:string password_digest:string
3.2 配置模型验证
/app/models/user.rb
validates :password, length: {in: 8..20}
before_save {self.email = email.downcase}
validates :username, presence:true, length: {in: 6..20}
validates :email, presence:true, length: {in: 5..255}, format: {with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i}, uniqueness:{case_sensitive: false}
has_secure_password
3.3 controller
rails g controller User signin signup
/app/contorllers/application_controller.rb
def current_user
@current_user ||= session[:user_id] && User.find(session[:user_id])
end
def require_user
render json: {code:-1,info:'login_required'} unless current_user
end
/app/controllers/user_controller.rb
def signup
@user = User.new(user_params)
if !@user.valid?
code = 0
data = @user.errors.messages
info = 'bad_for_reasons'
else
if @user.save
code = 1
info = 'success'
data = {userId:@user.id,username:@user.username}
else
code = 0
data = ''
info = 'reason_unknown'
end
end
render json: {code:code, info:info,data:data}
end def signin
@user = User.find_by_email(params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = @user.id
render json: {code:1, info:'success',data:{userId:@user.id,username:@user.username}}
else
render json: {code:0,info:'bad'}
end
end def destroy # 注销
session[:user_id] = nil
render json: {code:1,info:'success'}
end private
def user_params
params.require(:user).permit(:username,:email,:password)
end
3.4 配置路由
格式: get 'url', to: 'controller#method'
3.5 启动
rails s
4. 部署
rails s -e production
可能会提示缺少SECRET_KEY_BASE
RAILS_ENV=production rake secret /etc/profile
export SECRET_KEY_BASE=刚才生成的密钥
source /etc/profile
更多查看
https://www.cnblogs.com/yxi-liu/p/10331310.html
rails5 后台入门(api mode)的更多相关文章
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...
- Storm编程入门API系列之Storm的Topology多个Workers数目控制实现
前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 继续编写 StormTopologyMoreWorker.java ...
- Storm编程入门API系列之Storm的Topology多个Executors数目控制实现
前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 Storm编程入门API系列之Storm的Topology多个Wor ...
- Storm编程入门API系列之Storm的Topology多个tasks数目控制实现
前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 Storm编程入门API系列之Storm的Topology多个Wor ...
- Storm编程入门API系列之Storm的定时任务实现
概念,见博客 Storm概念学习系列之storm的定时任务 Storm的定时任务,分为两种实现方式,都是可以达到目的的. 我这里,分为StormTopologyTimer1.java 和 Sto ...
- c#后台调用API
前两周赶上项目第一个版本上线,着实忙了一把,毕竟只有两个人负责.如今已完结,总算喘了一口气,现在任务就是写API.测API,许久之前写过JS前台调用 项目API,也写过后台调用开放的手机号归属地查询, ...
- 小白的springboot之路(十一)、构建后台RESTfull API
0.前言 开发系统中,前后端分离,后端一般返回RESTfull API,前端调用API构建UI,彼此分离.互相完全独立: 后台API中,我们一般返回结果码.提示信息.数据三部分内容,如图: 我们今天 ...
- nodejs入门API之fs模块
fs模块下的类与FS常量 fs模块下的主要方法 fs的Promise API与FileHandle类 一.fs模块下的类 1.1 fs.Dir:表示目录流的类,由 fs.opendir().fs.op ...
- vue学习过程总结(07) - vue的后台服务API封装及跨域问题的解决
以登录流程为例说明接口的封装. 1.登录调用后台的登录api 登录界面的代码 <template> <div class="login-page"> < ...
随机推荐
- java 与 CDH kafka集成
本文主要是通过在网上找到的例子进行演示: 一.说明 开发环境如下: idea + jdk 1.8 + maven maven 中引用的架包如下: 二. 生产者 impor ...
- [Solution] 969. Pancake Sorting
Difficulty: Medium Problem Given an array A, we can perform a pancake flip: We choose some positive ...
- maven之如何将自己的写的 maven 构件发布到 nexus 私服
概念:Nexus服务器是一个代码包管理的服务器,可以理解 Nexus 服务器是一个巨大的 Library 仓库.Nexus 可以支持管理的工具包括 Maven , npm 等,对于 JAVA 开发来说 ...
- Linux查看机器负载
负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. Linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...
- strcat的用法
原型: char *strcat(char *str1,char *str2); strcat的实现: char* MyStrcat(char *dst, const char*src) { if ( ...
- svn如何根据提交日志信息回退版本
问题场景: 1 记得提交的日志信息中包含openssl,但是不记得这次提交的版本号revesion,是svn初始化后中间的某次提交: 2 svn环境的操作系统平台为Fedora, 即命令行下:而且sv ...
- Mysql InnoDB下的两种行锁
今天例举2种常见的Mysql InnoDB下的行锁 现有表dr_test(id pk, name) 数据是 1 zhangsan2 lisi3 wangwu 例子1 事务1 update dr_tes ...
- [并查集][NOIP2015]信息传递
信息传递 题目描述 有 N 个同学( 编号为 1 到 N) 正在玩一个信息传递的游戏. 在游戏里每人都有一个固定的信息传递对象, 其中,编号为i的同学的信息传递对象是编号为ti的同学. 游戏开始时, ...
- Python之路(第三十七篇)并发编程:进程、multiprocess模块、创建进程方式、join()、守护进程
一.在python程序中的进程操作 之前已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序 ...
- CentOS 7 设置默认进入图形界面或文本界面
[root@rems2 ~]# systemctl get-default graphical.target [root@rems2 ~]# systemctl set-default multi-u ...