软件开发定制motor-admin 无代码管理面板

motor-admin

https://.com/motor-admin

软件开发定制下载项目源码

git clone git@github.com:motor-admin/motor-admin.git
  • 1

版本选择

2.7.1

软件开发定制安装项目依赖的 gem

bundle install
  • 1

rails about

  • 1

启动数据库

sudo service postgresql start
  • 1

执行数据库迁移

执行数据库创建、迁移、填充数据等操作

rails db:createrails db:migraterails db:seed
  • 1
  • 2
  • 3

启动 webpack-derver

npm install -g yarnyarn./bin/webpack-dev-server 
  • 1
  • 2
  • 3

开发环境下启动 rails 项目

rails s
  • 1

项目首页
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyA2OApy-1639316234911)(img/discourse01.jpg)]

rails about

(base) peng@peng-pc:~/RailsTrainCamp/code/1103/discourse$ rails aboutAbout your application's environmentRails version             6.1.4.1Ruby version              ruby 3.0.3RubyGems version          3.1.6Rack version              2.2.3JavaScript Runtime        mini_racer (V8)Middleware                MessageBus::Rack::Middleware, Rack::MiniProfiler, Middleware::TurboDev, Middleware::MissingAvatars, ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, SilenceLogger, Logster::Middleware::Reporter, ActionDispatch::ShowExceptions, Logster::Middleware::DebugExceptions, ActionDispatch::ActionableExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::DiscourseCookieStore, ActionDispatch::Flash, ContentSecurityPolicy::Middleware, ActionDispatch::PermissionsPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::TempfileReaper, Middleware::OmniauthBypassMiddlewareApplication root          /home/peng/RailsTrainCamp/code/1103/discourseEnvironment               developmentDatabase adapter          postgresqlDatabase schema version   0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

启动数据库

sudo service postgresql start
  • 1

执行数据库迁移

执行数据库创建、迁移、填充数据等操作

rails db:createrails db:migraterails db:seed
  • 1
  • 2
  • 3

启动 webpack-derver

npm install -g yarnyarn./bin/webpack-dev-server 
  • 1
  • 2
  • 3

开发环境下启动 rails 项目

rails s
  • 1

数据库设计文件

# This file is auto-generated from the current state of the database. Instead# of editing this file, please use the migrations feature of Active Record to# incrementally modify your database, and then regenerate this schema definition.## This file is the source Rails uses to define your schema when running `bin/rails# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to# be faster and is potentially less error prone than running all of your# migrations from scratch. Old migrations may fail to apply correctly if those# migrations use external dependencies or application code.## It's strongly recommended that you check this file into your version control system.ActiveRecord::Schema.define(version: 2021_08_05_081429) do  # These are extensions that must be enabled in order to support this database  enable_extension "plpgsql"  create_table "motor_admin_user_roles", force: :cascade do |t|    t.bigint "admin_user_id", null: false    t.bigint "role_id", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["admin_user_id"], name: "index_motor_admin_user_roles_on_admin_user_id"    t.index ["role_id", "admin_user_id"], name: "index_motor_admin_user_roles_on_role_id_and_admin_user_id", unique: true    t.index ["role_id"], name: "index_motor_admin_user_roles_on_role_id"  end  create_table "motor_admin_users", force: :cascade do |t|    t.string "email", default: "", null: false    t.string "first_name"    t.string "last_name"    t.string "encrypted_password", default: "", null: false    t.string "reset_password_token"    t.datetime "reset_password_sent_at", precision: 6    t.datetime "remember_created_at", precision: 6    t.integer "sign_in_count", default: 0, null: false    t.datetime "current_sign_in_at", precision: 6    t.datetime "last_sign_in_at", precision: 6    t.string "current_sign_in_ip"    t.string "last_sign_in_ip"    t.integer "failed_attempts", default: 0, null: false    t.string "unlock_token"    t.datetime "locked_at", precision: 6    t.datetime "deleted_at", precision: 6    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["email"], name: "index_motor_admin_users_on_email", unique: true    t.index ["reset_password_token"], name: "index_motor_admin_users_on_reset_password_token", unique: true    t.index ["unlock_token"], name: "index_motor_admin_users_on_unlock_token", unique: true  end  create_table "motor_alert_locks", force: :cascade do |t|    t.bigint "alert_id", null: false    t.string "lock_timestamp", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["alert_id", "lock_timestamp"], name: "index_motor_alert_locks_on_alert_id_and_lock_timestamp", unique: true    t.index ["alert_id"], name: "index_motor_alert_locks_on_alert_id"  end  create_table "motor_alerts", force: :cascade do |t|    t.bigint "query_id", null: false    t.string "name", null: false    t.text "description"    t.text "to_emails", null: false    t.boolean "is_enabled", default: true, null: false    t.text "preferences", null: false    t.bigint "author_id"    t.string "author_type"    t.datetime "deleted_at", precision: 6    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "motor_alerts_name_unique_index", unique: true, where: "(deleted_at IS NULL)"    t.index ["query_id"], name: "index_motor_alerts_on_query_id"    t.index ["updated_at"], name: "index_motor_alerts_on_updated_at"  end  create_table "motor_audits", force: :cascade do |t|    t.bigint "auditable_id"    t.string "auditable_type"    t.bigint "associated_id"    t.string "associated_type"    t.bigint "user_id"    t.string "user_type"    t.string "username"    t.string "action"    t.text "audited_changes"    t.bigint "version", default: 0    t.text "comment"    t.string "remote_address"    t.string "request_uuid"    t.datetime "created_at", precision: 6    t.index ["associated_type", "associated_id"], name: "motor_auditable_associated_index"    t.index ["auditable_type", "auditable_id", "version"], name: "motor_auditable_index"    t.index ["created_at"], name: "index_motor_audits_on_created_at"    t.index ["request_uuid"], name: "index_motor_audits_on_request_uuid"    t.index ["user_id", "user_type"], name: "motor_auditable_user_index"  end  create_table "motor_configs", force: :cascade do |t|    t.string "key", null: false    t.text "value", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["key"], name: "index_motor_configs_on_key", unique: true    t.index ["updated_at"], name: "index_motor_configs_on_updated_at"  end  create_table "motor_dashboards", force: :cascade do |t|    t.string "title", null: false    t.text "description"    t.text "preferences", null: false    t.bigint "author_id"    t.string "author_type"    t.datetime "deleted_at", precision: 6    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["title"], name: "motor_dashboards_title_unique_index", unique: true, where: "(deleted_at IS NULL)"    t.index ["updated_at"], name: "index_motor_dashboards_on_updated_at"  end  create_table "motor_encrypted_configs", force: :cascade do |t|    t.string "key", null: false    t.text "value", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["key"], name: "index_motor_encrypted_configs_on_key", unique: true    t.index ["updated_at"], name: "index_motor_encrypted_configs_on_updated_at"  end  create_table "motor_forms", force: :cascade do |t|    t.string "name", null: false    t.text "description"    t.text "api_path", null: false    t.string "http_method", null: false    t.text "preferences", null: false    t.bigint "author_id"    t.string "author_type"    t.datetime "deleted_at", precision: 6    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "motor_forms_name_unique_index", unique: true, where: "(deleted_at IS NULL)"    t.index ["updated_at"], name: "index_motor_forms_on_updated_at"  end  create_table "motor_queries", force: :cascade do |t|    t.string "name", null: false    t.text "description"    t.text "sql_body", null: false    t.text "preferences", null: false    t.bigint "author_id"    t.string "author_type"    t.datetime "deleted_at", precision: 6    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "motor_queries_name_unique_index", unique: true, where: "(deleted_at IS NULL)"    t.index ["updated_at"], name: "index_motor_queries_on_updated_at"  end  create_table "motor_resources", force: :cascade do |t|    t.string "name", null: false    t.text "preferences", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "index_motor_resources_on_name", unique: true    t.index ["updated_at"], name: "index_motor_resources_on_updated_at"  end  create_table "motor_roles", force: :cascade do |t|    t.string "name", null: false    t.text "rules", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "index_motor_roles_on_name", unique: true    t.index ["updated_at"], name: "index_motor_roles_on_updated_at"  end  create_table "motor_taggable_tags", force: :cascade do |t|    t.bigint "tag_id", null: false    t.bigint "taggable_id", null: false    t.string "taggable_type", null: false    t.index ["tag_id"], name: "index_motor_taggable_tags_on_tag_id"    t.index ["taggable_id", "taggable_type", "tag_id"], name: "motor_polymorphic_association_tag_index", unique: true  end  create_table "motor_tags", force: :cascade do |t|    t.string "name", null: false    t.datetime "created_at", precision: 6, null: false    t.datetime "updated_at", precision: 6, null: false    t.index ["name"], name: "motor_tags_name_unique_index", unique: true  end  add_foreign_key "motor_admin_user_roles", "motor_admin_users", column: "admin_user_id"  add_foreign_key "motor_admin_user_roles", "motor_roles", column: "role_id"  add_foreign_key "motor_alert_locks", "motor_alerts", column: "alert_id"  add_foreign_key "motor_alerts", "motor_queries", column: "query_id"  add_foreign_key "motor_taggable_tags", "motor_tags", column: "tag_id"end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发