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"> < ...
随机推荐
- 在同时满足if 和 else 条件的情况下,输出所需的内容。
请问划线处填什么内容,可以输出 "Hello World!"?if(__________){ printf("Hello ");}else{ pri ...
- mybatis出现无效的列类型
package com.webapp.hanqi.test; import java.util.Date; import org.junit.jupiter.api.AfterEach; import ...
- python多线程的学习
0x00.前言 学了一下python的多线程,threading模块 感觉挺有意思的,随便练手写了一个很粗陋的windows下多线程扫在线ip的脚本 脚本没什么技术含量,纯粹练手,扫一趟192的局域网 ...
- Android 菊花加载工具类
先看看实现效果图 1.首先自定义一个类继承系统ProgressDialog /** * Created by hanbao0928 on 2018/11/1. */ public class Dial ...
- SQL 数据开发(经典)转贴
数据开发(经典) 1.按姓氏笔画排序: Select * From TableName Order By CustomerName Collate Chinese_PRC_Str oke_ci_as ...
- 写给自己的小CASE
一时的完美不代表什么,重要的是不断地学习和成长:直面挑战,不断进取. 摘自<看见成长的自己>.
- project2
[概念] 要好好理解并且背下来记住 Java基础,呵呵呵.自己查吧. local host搞错了,整个跑不出来.真尴尬.不理解啊. static原来是全局的意思啊,好吧.以前都忘了,这次该记住了.st ...
- LeetCode解题录-51~100
[leetcode]51. N-QueensN皇后 Backtracking Hard [leetcode]52. N-Queens II N皇后 Backtracking Hard [leet ...
- WebSocket入门及示例
前言 一直在想要不要写下这篇,因为网上关于websocket的介绍和使用的好文实在太多太多,例如有这篇和这篇. 但我不管了,写下来,这样我就不用在想使用的时候总是去翻写过的源码了. 先回答几个简单的问 ...
- winform自定义控件中其他遮挡控件点击事件
自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...