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"> < ...
随机推荐
- svn仓库迁移
注意事项 1.仅迁移代码.日志.版本信息,(用户.权限.配置即conf目录需要手动移动或重新配置) 2.新仓库需无代码,即新建仓库后不要进行上传操作,否则迁移可能造成冲突,导致迁移失败 操作步骤 1. ...
- 随便说说sequelize的问题
最近在做的项目频繁的修改数据库让人感觉很烦躁,sequelize在执行sync的时候只会重新创建表,如果原先有数据只能直接删除,但是这样显然是不行的,因为数据不能就这么消失了吧. 所以必须要migra ...
- 关于感受野 (Receptive field) 你该知道的事
Receptive field 可中译为“感受野”,是卷积神经网络中非常重要的概念之一. 我个人最早看到这个词的描述是在 2012 年 Krizhevsky 的 paper 中就有提到过,当时是各种不 ...
- Android 保存图片到相册
/** * 保存图片到相册 */ public void saveImageToGallery(Bitmap mBitmap) { if (!Environment.getExternalStorag ...
- python note 09 初识函数
1.函数 def my_len(): #自定义函数(相当于len) i = 0 for k in s: i += 1 print(i) print(my_len()) #输出None,因为没有返回值 ...
- 基于Linux环境,创建PHP后台守护进程(转载)
应用场景:某些情况下,我们需要持续的周期性的提供一些服务,比如监控内存或cpu的运行状况,这些应用与客户端是没有关系的,不是说客户端(如web界面,手机app等)关闭了,我们就不监控内存或cpu了,为 ...
- boost中Function和Lambda的使用
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...
- day04-Servlet介绍(1)
1.servlet的概述 a.什么是servlet --servlet是javaWeb的三大组件(Listener,Filter)之一,他属于动态资源 --servlet的作用是(10086): 服务 ...
- JSP 页面跳转的实现方法
客户端跳转 1. 使用 href 超链接标记 <a href="new.jsp">跳转</a> 2. 使用表单提交完成跳转 <form actio ...
- Java获取请求主机真实ip
一般情况下 getRemoteAddr()是可以正常使用的,代码如下: public String getIpAdress(HttpServletRequest request) { ip = req ...