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


  before_action :set_csrf_cookie
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


  helper_method :current_user
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)的更多相关文章

  1. 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. 动态参 ...

  2. Storm编程入门API系列之Storm的Topology多个Workers数目控制实现

    前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 继续编写 StormTopologyMoreWorker.java ...

  3. Storm编程入门API系列之Storm的Topology多个Executors数目控制实现

    前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 Storm编程入门API系列之Storm的Topology多个Wor ...

  4. Storm编程入门API系列之Storm的Topology多个tasks数目控制实现

    前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 Storm编程入门API系列之Storm的Topology多个Wor ...

  5. Storm编程入门API系列之Storm的定时任务实现

    概念,见博客 Storm概念学习系列之storm的定时任务 Storm的定时任务,分为两种实现方式,都是可以达到目的的. 我这里,分为StormTopologyTimer1.java   和  Sto ...

  6. c#后台调用API

    前两周赶上项目第一个版本上线,着实忙了一把,毕竟只有两个人负责.如今已完结,总算喘了一口气,现在任务就是写API.测API,许久之前写过JS前台调用 项目API,也写过后台调用开放的手机号归属地查询, ...

  7. 小白的springboot之路(十一)、构建后台RESTfull API

    0.前言 开发系统中,前后端分离,后端一般返回RESTfull  API,前端调用API构建UI,彼此分离.互相完全独立: 后台API中,我们一般返回结果码.提示信息.数据三部分内容,如图: 我们今天 ...

  8. nodejs入门API之fs模块

    fs模块下的类与FS常量 fs模块下的主要方法 fs的Promise API与FileHandle类 一.fs模块下的类 1.1 fs.Dir:表示目录流的类,由 fs.opendir().fs.op ...

  9. vue学习过程总结(07) - vue的后台服务API封装及跨域问题的解决

    以登录流程为例说明接口的封装. 1.登录调用后台的登录api 登录界面的代码 <template> <div class="login-page"> < ...

随机推荐

  1. 微信小程序-数据绑定

    在js页面的data字典内添加绑定数据 data: { "messg":"helloworld " }, 在wxml页面内使用{{}}调用数据

  2. ajax导出表格数据失败的几处坑

    $.ajax({ type:'POST', async:false, url:'/export', data:params, dataType:'json', ... success:function ...

  3. Leetcode1000 合并石头的最低成本 区间DP

    有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头. 每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的总数. 找出把所有石头合并成一堆的最低成 ...

  4. centos 7.4安装zabbix 3

    1.安装前准备 1)关闭防火墙 systemctl status firewalld #查看防火墙状态 systemctl stop firewalld.service #停止firewall sys ...

  5. jquery取出checkbox多选的值(带全选功能)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. 创建表结构的sql语句

    1.创建表结构 表名: ODS_PSP_DIS_DAY_CALC create table ODS_PSP_DIS_DAY_CALC ( ID      CHAR(32)  NOT NULL, DIS ...

  7. Cannot attach medium 'D:\program\VirtualBox\VBoxGuestAdditions.iso' {}: medium is already associated with the current state of machine uuid {}返回 代码: VBOX_E_OBJECT_IN_USE (0x80BB000C)

    详细的错误信息如下: Cannot attach medium 'D:\program\VirtualBox\VBoxGuestAdditions.iso' {83b35b10-8fa2-4b81-8 ...

  8. docker-3 Apache

    docker 安装 Apache 环境 docker pull httpd 文件创建连接(这样就可以不用发布了,两个文件夹会自动同步文件) ln -s /root/jenkins_home/works ...

  9. BZOJ1058或洛谷1110 [ZJOI2007]报表统计

    BZOJ原题链接 洛谷原题链接 STL 本题可以直接使用\(\mathtt{STL\ multiset}\)水过去. 因为本题插入数的操作实际上就是将原数列分为\(n\)段,在每一段的末尾插入数,所以 ...

  10. redis多实例

    1.首先在发布系统: 2.安装多实例利用cmd命令安装,切换目录到redis下 (1)首先拷贝一个redis的conf文件(如redis_6380.conf),并且修改里面的服务端口号.日志端口号,以 ...