bin/setup的探索

bin/setup

我们平时运行的那些
rails g xxx
rake db:migrate
bundle
这里用的rails,rake,bundle
其实都应该是这样:
bin/rails
bin/rake
bin/bundle
为什么呢?
答案就在项目下的bin文件里


这些文件都没有后缀名
也就是那些直接用命令行去跑的脚本(script)

一切缘起我对bin/setup的疑惑
所以就打开其中setup的代码我们来看一下

#!/usr/bin/env ruby

require 'pathname'
require 'fileutils'
include FileUtils

# path to your application root.

APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)

def system!(*args)
  system(*args) || abort("\n== Command #{args} failed ==")
end

chdir APP_ROOT do
  # This script is a starting point to setup your application.

  # Add necessary setup steps to this file.


  puts '== Installing dependencies =='
  system! 'gem install bundler --conservative'
  system('bundle check') || system!('bundle install')

  # puts "\n== Copying sample files =="

  # unless File.exist?('config/database.yml')

  #   cp 'config/database.yml.sample', 'config/database.yml'

  # end


  puts "\n== Preparing database =="
  system! 'bin/rails db:setup'

  puts "\n== Removing old logs and tempfiles =="
  system! 'bin/rails log:clear tmp:clear'

  puts "\n== Restarting application server =="
  system! 'bin/rails restart'
end

看完后我们大概叙述一下步骤:

  1. 添加配置文件
  2. 读取应用根目录
  3. 定义一个跑命令的方法system!(*args)
  4. gem install bundler --conservative安装bundler
  5. system('bundle check') || system!('bundle install')检查是否有依赖要安装,如果有,就安装
  6. bin/rails db:setup 配置数据库 注意:这一步实际上是做了三步 db:create -> db:schema:load -> db:seed
  7. bin/rails log:clear tmp:clear清空过去的打印与缓存信息
  8. bin/rails restart重启项目

另外:我们可以发现其中有一块被注释掉的代码

  puts "\n== Copying sample files =="
  unless File.exist?('config/database.yml')
    cp 'config/database.yml.sample', 'config/database.yml'
  end

这个可以帮我们把database.yml创建好

也就是说
bin/setup
的作用最适合用在,刚刚clone下来的项目,快速做初始配置

如此可见
我们在命令行中输入那些命令
实际上就是一个个脚本
也就是一大堆代码的封装

我们调用那些脚本,
并给那些脚本传入参数,
脚本就根据我们传入的参数运行一系列脚本
快速并方便的生成许多项目运行需要的文件