本人是个Pythoner,曾经对ruby嗤之以鼻,但每种语言都有自己的擅长方向,不能一味的否定一门语言。在维护一个采用ruby on rails框架的项目过程中,发现rails很多优点,这些都可以借鉴到python程序中:
db schema migration
远程部署到指定环境
本篇主要关注的是 db schema migration,在下一篇中将会介绍远程部署python程序。
db migration主要使用rails和rake两个命令,下面的demo是运行在Mac OS上。
环境准备
git clone https://github.com/flying-bir...
cd python-db-schem; sudo gem install bundler
bundle install
Create Table
生成db文件,相当于sql文件
命令:
./bin/rails generate migration CreateJobTable
输出:
db/migrate文件夹下面生成 {timestamp}_create_job_table.rb
在上步生成的文件中,写入具体的sql内容
采用如下格式:
class CreateJobTable < ActiveRecord::Migration
def change
create_table :d_job do |t|
t.string :name
t.string :path
t.string :team
t.references :pipeline
t.string :function
t.text :url
t.integer :exclude,default:0
end
add_foreign_key :d_job, :d_pipeline, column: :pipeline_id
end
end
Apply SQL File
命令:
./bin/rake db:migrate
运行上面的命令之后,将会在本地的db中创建出一个d_job表。
使用mysql的show create table来查看d_job的具体信息:
mysql> show create table d_job \G
*************************** 1. row ***************************
Table: d_job
Create Table: CREATE TABLE `d_job` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text,
`path` text,
`team` text,
`pipeline_id` int(11) DEFAULT NULL,
`function` varchar(120) DEFAULT NULL,
`exclude` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `pipeline_id` (`pipeline_id`),
CONSTRAINT `d_job_ibfk_1` FOREIGN KEY (`pipeline_id`) REFERENCES `d_pipeline` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
Rollback
运行下面的命令之后,上一步的db命令将会回滚,即drop table d_job
./bin/rake db:rollback STEP=1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。