// MustResetDB re-applies all database migrations. func MustResetDB(db *sqlx.DB) { m := &migrate.AssetMigrationSource{ Asset: migrations.Asset, AssetDir: migrations.AssetDir, Dir: "", } if _, err := migrate.Exec(db.DB, "postgres", m, migrate.Down); err != nil { log.Fatal(err) } if _, err := migrate.Exec(db.DB, "postgres", m, migrate.Up); err != nil { log.Fatal(err) } }
func MigrateToLatest(dbMap *gorp.DbMap) (int, error) { source, dialect, err := migrationSource(dbMap) if err != nil { return 0, err } return migrate.Exec(dbMap.Db, dialect, source, migrate.Up) }
func (d DatabaseMigrator) Migrate(db *sql.DB, migrationsPath string) { sql_migrate.SetTable("notifications_model_migrations") migrations := &sql_migrate.FileMigrationSource{ Dir: migrationsPath, } _, err := sql_migrate.Exec(db, "mysql", migrations, sql_migrate.Up) if err != nil { panic(err) } }
func MigrateToLatest(dbMap *gorp.DbMap) (int, error) { source := getSource() return migrate.Exec(dbMap.Db, migrationDialect, source, migrate.Up) }
func main() { startOptions, startFlagSet := DeclareStartOptions() printDocumentation := func() { print(documentation) print("\nstart command options :\n\n") startFlagSet.PrintDefaults() print("\nexample: gonews start -debug -port 8080 -host localhost\n") } if len(os.Args) == 1 { printDocumentation() return } switch os.Args[1] { case "start": // configuration startFlagSet.Parse(os.Args[2:]) // if port is an env variable, get env variable if len(startOptions.Port) > 0 && startOptions.Port[0] == '$' { startOptions.Port = os.Getenv(string(startOptions.Port[1:])) } connection, connectionErr := sql.Open(startOptions.Driver, startOptions.DataSource) if connectionErr != nil { log.Fatal(connectionErr) } // warnings if startOptions.Env != "production" { log.Printf("You are using '%s' environment, please use option -env=production in production", startOptions.Env) } if startOptions.Secret == defaultSecret { log.Printf("You are using the default secret key which is unsecure, please generate a strong secret key, and set is with -secret argument") } // migration if startOptions.Migrate { migrationSource := sqlmigrate.FileMigrationSource{Dir: path.Join(startOptions.MigrationPath, startOptions.Env, startOptions.Driver)} i, err := sqlmigrate.Exec(connection, startOptions.Driver, migrationSource, sqlmigrate.Up) if err != nil { log.Fatal(err) } log.Printf("%d migrations executed", i) } // loading fixtures if startOptions.LoadFixtures { log.Println("loading fixtures ... ") LoadFixtures(connection, startOptions.Driver) log.Println("done loading fixtures.") } // start server containerOptions := gonews.DefaultContainerOptions() containerOptions.LogLevel = gonews.LogLevel(startOptions.LogLevel) containerOptions.Debug = startOptions.Debug containerOptions.ConnectionFactory = func() (*sql.DB, error) { return connection, connectionErr } appOptions := gonews.AppOptions{ContainerOptions: containerOptions} // configuration file if startOptions.ConfigurationFilePath != "" { fileBytes, err := ioutil.ReadFile(startOptions.ConfigurationFilePath) if err != nil && startOptions.ConfigurationFilePath != "gonews.yml" { log.Printf("Error loading configuration file %s : %s \n", startOptions.ConfigurationFilePath, err) } else { err = yaml.Unmarshal(fileBytes, &appOptions) if err != nil { log.Fatalf("Error reading configuration file %s : %s \n", startOptions.ConfigurationFilePath, err) } else { log.Printf("Config loaded : %#v", appOptions) } } } app := gonews.GetApp(appOptions) addr := startOptions.Host + ":" + startOptions.Port fmt.Printf("Server Listening On: %s\n", addr) err := http.ListenAndServe(addr, app) if err != nil { log.Fatal(err) } return case "version": print(Version) case "help": printDocumentation() default: print("not a valid command : ", os.Args[1]) printDocumentation() os.Exit(2) } }
// MigrateUp migrates DB using migrate files func (d *Driver) MigrateUp(component string) (migrationsApplied int, err error) { source := d.getAssetMigrationSource(component) migrationsApplied, err = migrate.Exec(d.database.DB, "postgres", source, migrate.Up) return }