Learn Rails5.2- ActiveRecord: Migration , spring的使用(不兼容的解决办法)
偶然一次:
运行rails generate停止不动,网上查找答案,可能是bundle update 之后 spring 版本变化了,和正在运行的 spring 实例不兼容。
Spring导致的同样的原因:
rails g migration后,窗口显示了生成迁移文件,但文件树结构上没有显示这个文件。
rails console停止不动,打不开控制台。
解决办法:
关闭spring, spring stop
⚠️,如果谷歌上查找问题,中文描述问题找不到好的结果,改用英文描述问题,然后搜索。
Spring Application Preloader
一个预加载程序,通过保持你的程序在后端运行来加速开发。所以当你要跑一个测试,迁移时,你无需每次都boot it。
这是rails4.1带来的功能。
bin/spring status 看状态。
bin/spring stop 停止使用,遇到不兼容时候。
Features
- 完全自动化,无需明确start, stop后端进程
- 每次运行时,reload你的app
- 当configs/initializers/gem dependencies变化时会重新开始restarts 你的app
Compatibility兼容
文档ruby2.5未显示兼容,rails5.2未显示兼容。
rails5.2在rails new后会默认安装Spring gem
推荐命令都在bin/目录下执行。
Usage
新键一个rails,运行rails g scaffold post name:string然后运行一个测试:
$ time bin/rake test test/controllers/posts_controller_test.rb
0.13s user 0.02s system 4% cpu 3.091 total
再测的话速度就会加快:
0.13s user 0.02s system 26% cpu 0.566 total
这是因为当修改程序文件或测试文件,变化会被pick up,在下次运行时后端进程无需再启动。
这个工作效果和代码reloading一样,让你在开发时,刷新浏览器可以立即看到变化。
不过当configs/initializers/gem dependencies变化时会完全restarts 你的app
当terminal关闭时,Spring会自动关闭。
如果遇到兼容问题,可以手动关闭bin/spring stop
可以在代码中检测,spring是否开启:
Removal
- Unspring 你的bin/executables: bin/spring binstub --remove --all
- 或者取代gem spring
Deployment
在产品环境下,不能安装Spring.
为了防止被安装,使用--without development test参数给bundle install命令
$ bundle install --without development test
⚠️个人理解: 不安装development, test环境下的gem.
问题定位Troubleshooting:
在单独的窗口运行:spring server ,会产生日志并输出。
Migrations
如果手动删除数据库,再运行rails db:migrate会重新迁移。
$ rm db/development.sqlite3
$ rails db:migrate
rails db:rollback会回滚一次
rails db:version会看当前的版本,每次操作都有唯一的版本号。版本号是timestamp。
$ls db/migrate/ 可以列出版本列表。
可以使用指定的迁移,数字0代表开始,所有表格连内部数据都被删除了。
$ rails db:migrate VERSION=0
config/database.yml可以看到不同环境的数据库配置。
开发环境使用sqlite3
生产环境需要使用MySQL或者PostgreSQL
进入数据库:
$ sqlite3 db/development.sqlite3
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .tables
products schema_migrations
sqlite> .schema products
CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "price" decimal(7,2), "weight" integer, "in_stock" boolean, "expiration_date" date, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "height" integer);
Creating Index解析: 表格schema_migrations被用于迁移的版本管理。这个表格在第一次迁移时被Rails执行。
https://en.wikipedia.org/wiki/Database_indexDatabase index 是一个数据结构,它可以加速从数据库中取回需要的数据。代价是额外的存储空间来保存索引的数据结构。
add_index :products, :name
自动增加的Fields
- id:integer:给记录增加唯一的
Learn Rails5.2- ActiveRecord: Migration , spring的使用(不兼容的解决办法)的更多相关文章
- [java] bug经验 Unable to locate Spring NamespaceHandler for XML schema namespace解决办法
报错关键字: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration probl ...
- struts,hibernate,spring配置时问题汇总及解决办法
1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor 缺少asm-3.3.jar 2.java.lang.NoClassDe ...
- [Java]Java 9运行Spring Boot项目报错的解决办法
简介 为了学习和尽快掌握 Java 9 的模块化(Module System)新特性,最近安装了 JDK 9,新建了一个 Spring Boot 进行尝试, 过程中遇到了一下报错问题,写下此文谨作为个 ...
- Spring @ResponseBody 返回乱码 的优雅解决办法
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 返回的结果中,中文全部被问号(?)代替的解决办法: *-servlet.xml的部分配置如下: <bean id=&quo ...
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
系统为SpringMVC框架,在开发的过程中有一些工具类需要调用下由spring管理的service层.但是一进注入不进来,报null异常: 在尝试了网上的一系列方法后,还是没有解决.网上的解决方法主 ...
- spring入门常见的问题及解决办法
在学习spring过程中遇见了种种不同的异常错误,这里做了一下总结,希望遇见类似错误的同学们共勉一下. 1. 错误一 Error creating bean with name 'helloServi ...
- spring boot项目遇到 'lower_case_table_names' 的解决办法
今天自己搭建了spring boot项目,配置的是mysql数据库,启动时报如下错误 Mon Jan 22 23:31:40 CST 2018 WARN: Establishing SSL conne ...
- Spring @Transactional注解不起作用解决办法及原理分析
Transactional失效场景介绍 第一种 Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用.例如以下代码. 定义一个错误的@Trans ...
- Spring Cache无效的问题以及解决办法
http://blog.csdn.net/kimylrong/article/details/50126979 @Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接 ...
随机推荐
- java面向对象(上)
一.一些重要的概念理解 Java是面向对象的程序设计语言,提供了类,成员变量,方法等的基本功能.类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量.它会引用到类的 ...
- [转]CentOS 6.4下Squid代理服务器的安装与配置
一.简介 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用 ...
- Oracle性能优化之表压缩及并行提高效率的测试
1.制作测试表 create table t1 as select * from FW_T_GTXLOG insert into t1 select * from t1; create table t ...
- MySQL怎样存储IP地址 IP转数字 互转
MySQL怎样存储IP地址 - cn三少 - 博客园 https://www.cnblogs.com/cnsanshao/p/3326648.html
- Scanline Fill Algorithm
https://www.sccs.swarthmore.edu/users/02/jill/graphics/hw3/hw3.html http://web.cs.ucdavis.edu/~ma/EC ...
- inotify+rsync安装配置
环境 系统 IP地址 主服务器 CentOS7.4 192.168.1.1 备份服务器 CentOS7.4 192.168.1.2 一.备份服务器 安装rsync(备) wget https://rs ...
- Qt::QWindow多窗口争抢置顶状态解决方案
有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...
- 【python】Python3 循环语句
[python]几种常见的循环 注意:如果涉及到程序中print语句中含有%d,%s,那么要在脚本最开始写语句:#coding=utf-8,才能够正常输出想要的数字或者字符串. Python3 循环语 ...
- Django之logging日志使用
Logger模块 是python中用于便捷记录日志且线程安全的模块 使用logging模块记录日志涉及四个主要类: logger提供了应用程序可以直接使用的接口: handler将(logger创建的 ...
- 统计编程的框架与R语言统计分析基础——摘(1)
清屏命令ctrl+L 一.基础 1.产生数据结构 a.直接输入 b.冒号,1:10 c.seq函数 d.rep函数 > 1:10 [1] 1 2 3 4 5 6 7 8 9 10 > 10 ...
- [java] bug经验 Unable to locate Spring NamespaceHandler for XML schema namespace解决办法