From 8ff09d98cf914d39c4d13c5029d1f153498a8cd0 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 06:43:01 +0900 Subject: [PATCH 1/6] Replace SCSS with plain CSS and drop dartsass-rails The stylesheet only used trivial Sass features, so it can be plain CSS served directly by propshaft. This removes the dartsass build step and the platform-specific sass-embedded binaries. Co-Authored-By: Claude Fable 5 --- .gitignore | 4 - Gemfile | 1 - Gemfile.lock | 62 ----------- Procfile.dev | 1 - app/assets/builds/.keep | 0 app/assets/stylesheets/application.css | 130 +++++++++++++++++++++++ app/assets/stylesheets/application.scss | 135 ------------------------ app/views/layouts/application.html.erb | 2 +- 8 files changed, 131 insertions(+), 204 deletions(-) delete mode 100644 app/assets/builds/.keep create mode 100644 app/assets/stylesheets/application.css delete mode 100644 app/assets/stylesheets/application.scss diff --git a/.gitignore b/.gitignore index f60b52a8a..312382f77 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ db/*.sqlite3 log/*.log tmp/ -.sass-cache/ .DS_Store .rvmrc *~ @@ -11,6 +10,3 @@ tmp/ *.swp *.swo public/assets/ - -/app/assets/builds/* -!/app/assets/builds/.keep diff --git a/Gemfile b/Gemfile index 4ae4fc3ea..442c2d88e 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,6 @@ gem 'puma' gem 'bootsnap', require: false gem "importmap-rails" gem "propshaft" -gem "dartsass-rails" gem 'aws-sdk-s3', '~> 1' group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index 9e5e192c6..06538f59c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -102,42 +102,12 @@ GEM concurrent-ruby (1.3.7) connection_pool (3.0.2) crass (1.0.7) - dartsass-rails (0.5.1) - railties (>= 6.0.0) - sass-embedded (~> 1.63) date (3.5.1) drb (2.2.3) erb (6.0.4) erubi (1.13.1) globalid (1.3.0) activesupport (>= 6.1) - google-protobuf (4.34.1) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-aarch64-linux-gnu) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-aarch64-linux-musl) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-arm64-darwin) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-x86-linux-gnu) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-x86-linux-musl) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-x86_64-darwin) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-x86_64-linux-gnu) - bigdecimal - rake (~> 13.3) - google-protobuf (4.34.1-x86_64-linux-musl) - bigdecimal - rake (~> 13.3) i18n (1.14.8) concurrent-ruby (~> 1.0) importmap-rails (2.2.3) @@ -265,37 +235,6 @@ GEM tsort reline (0.6.3) io-console (~> 0.5) - sass-embedded (1.98.0) - google-protobuf (~> 4.31) - rake (>= 13) - sass-embedded (1.98.0-aarch64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-aarch64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-aarch64-linux-musl) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-arm-linux-androideabi) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-arm-linux-gnueabihf) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-arm-linux-musleabihf) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-arm64-darwin) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-riscv64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-riscv64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-riscv64-linux-musl) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-x86_64-darwin) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-x86_64-linux-android) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-x86_64-linux-gnu) - google-protobuf (~> 4.31) - sass-embedded (1.98.0-x86_64-linux-musl) - google-protobuf (~> 4.31) securerandom (0.4.1) sqlite3 (2.9.5) mini_portile2 (~> 2.8.0) @@ -352,7 +291,6 @@ PLATFORMS DEPENDENCIES aws-sdk-s3 (~> 1) bootsnap - dartsass-rails importmap-rails pg propshaft diff --git a/Procfile.dev b/Procfile.dev index 9cad9378e..794ac3ea5 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1,2 +1 @@ web: unset PORT && bin/rails server -css: bin/rails dartsass:watch diff --git a/app/assets/builds/.keep b/app/assets/builds/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 000000000..94dfad368 --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,130 @@ +body { + padding-top: 50px; + font-size: 13px; +} + +.container-fluid { + max-width: 1200px; +} + +.navbar-nav > li > a, .navbar-brand { + height: 28px; +} + +@media screen and (max-width: 767px) { + .table-responsive-border { + border: 1px solid #ddd; + } + .table-responsive-border > .table { + margin-bottom: 0; + } +} + +.table-responsive { + overflow-x: auto; + min-height: 0.01%; +} + +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + + .table-responsive > .table-bordered { + border: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +table.reports th, table.reports td { + padding: 1px !important; +} + +table.reports tr.branch-separator td { + border-top: solid 2px black; +} + +table.reports tr td.datetime { + text-align: center; +} + +table.reports tr td.branch { + text-align: center; +} + +table.reports tr td.revision { + font-family: Menlo, monospace; + text-align: center; +} + +table.reports tr td:nth-child(6), +table.reports tr td:nth-child(7), +table.reports tr td:nth-child(8), +table.reports tr td:nth-child(9) { + background-color: #FF9090; +} + +table.reports tr td:nth-child(6):empty, +table.reports tr td:nth-child(7):empty, +table.reports tr td:nth-child(8):empty, +table.reports tr td:nth-child(9):empty { + background-color: #F0FFF0; +} + +table.reports tr td.summary { + background-color: #F0FFF0; +} + +table.reports tr td.summary div { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + width: 250px !important; +} + +table.reports tr td.summary.failure { + background-color: #FF9090; +} + +table.reports tr td.diff div { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + width: 100px !important; +} diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss deleted file mode 100644 index 3294eba65..000000000 --- a/app/assets/stylesheets/application.scss +++ /dev/null @@ -1,135 +0,0 @@ -// Entry point for your Sass build -// vendor/assets/stylesheets/bootstrap.min.css: v5.2.3 -@use 'bootstrap.min'; - -body { - padding-top: 50px; - font-size: 13px; -} - -.container-fluid { - max-width: 1200px; -} - -.navbar-nav > li > a, .navbar-brand { - height: 28px; -} - -.table-responsive-border { - @media screen and (max-width: 767px) { - border: 1px solid #ddd; - > .table { - margin-bottom: 0; - } - } -} - -.table-responsive { - overflow-x: auto; - min-height: 0.01%; - - @media screen and (max-width: 767px) { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - - > .table { - > thead, - > tbody, - > tfoot { - > tr { - > th, - > td { - white-space: nowrap; - } - } - } - } - - > .table-bordered { - border: 0; - - > thead, - > tbody, - > tfoot { - > tr { - > th:first-child, - > td:first-child { - border-left: 0; - } - > th:last-child, - > td:last-child { - border-right: 0; - } - } - } - - > tbody, - > tfoot { - > tr:last-child { - > th, - > td { - border-bottom: 0; - } - } - } - - } - } -} - -table.reports { - th, td { - padding: 1px !important; - } - tr.branch-separator td { - border-top: solid 2px black; - } - tr { - td.server { - // width: 150px; - } - td.datetime { - text-align: center; - } - td.branch { - text-align: center; - } - td.option { - } - td.revision { - font-family: Menlo, monospace; - text-align: center; - } - @for $i from 6 through 9 { - td:nth-child(#{$i}) { - background-color: #FF9090; - // width: 50px; - } - td:nth-child(#{$i}):empty { - background-color: #F0FFF0; - } - } - td.summary { - background-color: #F0FFF0; - div { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - width: 250px !important; - } - } - td.summary.failure { - background-color: #FF9090; - } - td.diff { - div { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - width: 100px !important; - } - } - } -} diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 16ffd359f..3d013cb51 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -9,7 +9,7 @@ <%= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon' %> - <%= stylesheet_link_tag "application", :media => "all" %> + <%= stylesheet_link_tag "bootstrap.min", "application", :media => "all" %> <%= javascript_importmap_tags %> From 4eb04c0be2d2dff960cf8cff38713e007f8daa51 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 06:46:11 +0900 Subject: [PATCH 2/6] Remove IE-era workarounds from table-responsive styles min-height: 0.01% (IE9) and -ms-overflow-style (IE10/11) no longer serve any browser, and overflow-x: auto is already defined by Bootstrap 5. Co-Authored-By: Claude Fable 5 --- app/assets/stylesheets/application.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 94dfad368..adaa7f1a4 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -20,17 +20,11 @@ body { } } -.table-responsive { - overflow-x: auto; - min-height: 0.01%; -} - @media screen and (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; } .table-responsive > .table > thead > tr > th, From 14c3b1053b47cf028c6f80b464769f312f01441c Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 06:46:51 +0900 Subject: [PATCH 3/6] Merge duplicate max-width: 767px media blocks Co-Authored-By: Claude Fable 5 --- app/assets/stylesheets/application.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index adaa7f1a4..72f9f50a8 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -18,9 +18,7 @@ body { .table-responsive-border > .table { margin-bottom: 0; } -} -@media screen and (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; From 0d761f94ad30ef98f959d256f0b8fd59c01eb718 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 06:47:44 +0900 Subject: [PATCH 4/6] Collapse enumerated nth-child selectors into a range Uses :nth-child(n+6):where(:nth-child(-n+9)). The :where() keeps specificity at the original 0-1-1 so the later td.summary rules still override the range for the summary column. Co-Authored-By: Claude Fable 5 --- app/assets/stylesheets/application.css | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index 72f9f50a8..d0cba97c0 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -85,17 +85,13 @@ table.reports tr td.revision { text-align: center; } -table.reports tr td:nth-child(6), -table.reports tr td:nth-child(7), -table.reports tr td:nth-child(8), -table.reports tr td:nth-child(9) { +/* :where() keeps specificity at 0-1-1 so the later td.summary rules + still win for the summary column, which falls in this range. */ +table.reports tr td:nth-child(n+6):where(:nth-child(-n+9)) { background-color: #FF9090; } -table.reports tr td:nth-child(6):empty, -table.reports tr td:nth-child(7):empty, -table.reports tr td:nth-child(8):empty, -table.reports tr td:nth-child(9):empty { +table.reports tr td:nth-child(n+6):where(:nth-child(-n+9)):empty { background-color: #F0FFF0; } From ce3df2c80ddc3d441b104fa994a0f7d131f11d31 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 07:10:46 +0900 Subject: [PATCH 5/6] Remove importmap-rails and dead JavaScript application.js initialized jQuery-based tooltips and popovers, but jQuery is not loaded and no view has matching elements, so every page ran no JavaScript at all. Dropping it removes the importmap-rails gem and the runtime dependency on the ga.jspm.io CDN. Co-Authored-By: Claude Fable 5 --- Gemfile | 1 - Gemfile.lock | 5 --- app/javascript/application.js | 9 ------ app/views/layouts/application.html.erb | 1 - bin/importmap | 4 --- config/importmap.rb | 5 --- db/schema.rb | 45 +++++++++++++------------- 7 files changed, 23 insertions(+), 47 deletions(-) delete mode 100644 app/javascript/application.js delete mode 100755 bin/importmap delete mode 100644 config/importmap.rb diff --git a/Gemfile b/Gemfile index 442c2d88e..a2959addb 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,6 @@ ruby ENV['CUSTOM_RUBY_VERSION'] || '~> 3.4.7' gem 'rails', '~> 8.1' gem 'puma' gem 'bootsnap', require: false -gem "importmap-rails" gem "propshaft" gem 'aws-sdk-s3', '~> 1' diff --git a/Gemfile.lock b/Gemfile.lock index 06538f59c..3b0f82ecf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -110,10 +110,6 @@ GEM activesupport (>= 6.1) i18n (1.14.8) concurrent-ruby (~> 1.0) - importmap-rails (2.2.3) - actionpack (>= 6.0.0) - activesupport (>= 6.0.0) - railties (>= 6.0.0) io-console (0.8.2) irb (1.17.0) pp (>= 0.6.0) @@ -291,7 +287,6 @@ PLATFORMS DEPENDENCIES aws-sdk-s3 (~> 1) bootsnap - importmap-rails pg propshaft puma diff --git a/app/javascript/application.js b/app/javascript/application.js deleted file mode 100644 index 7260fc0bb..000000000 --- a/app/javascript/application.js +++ /dev/null @@ -1,9 +0,0 @@ -// Entry point for the build script in your package.json -import * as Popper from "@popperjs/core" -import * as Bootstrap from "bootstrap" - -document.addEventListener('DOMContentLoaded' ,function() { - $("a[rel=popover]").popover(); - $(".tooltip").tooltip(); - return $("a[rel=tooltip]").tooltip(); -}); diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 3d013cb51..39f40137b 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -10,7 +10,6 @@ <%= favicon_link_tag 'favicon.ico', :rel => 'shortcut icon' %> <%= stylesheet_link_tag "bootstrap.min", "application", :media => "all" %> - <%= javascript_importmap_tags %> diff --git a/bin/importmap b/bin/importmap deleted file mode 100755 index 36502ab16..000000000 --- a/bin/importmap +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env ruby - -require_relative "../config/application" -require "importmap/commands" diff --git a/config/importmap.rb b/config/importmap.rb deleted file mode 100644 index e124f387d..000000000 --- a/config/importmap.rb +++ /dev/null @@ -1,5 +0,0 @@ -# Pin npm packages by running ./bin/importmap - -pin "application", preload: true -pin "bootstrap", to: "https://ga.jspm.io/npm:bootstrap@5.2.3/dist/js/bootstrap.esm.js" -pin "@popperjs/core", to: "https://ga.jspm.io/npm:@popperjs/core@2.11.6/lib/index.js" diff --git a/db/schema.rb b/db/schema.rb index 8b12523dd..b6cdd812d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,26 +10,26 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_09_11_072108) do +ActiveRecord::Schema[8.1].define(version: 2024_11_21_042607) do create_table "active_storage_attachments", force: :cascade do |t| - t.string "name", null: false - t.string "record_type", null: false - t.bigint "record_id", null: false t.bigint "blob_id", null: false t.datetime "created_at", null: false + t.string "name", null: false + t.bigint "record_id", null: false + t.string "record_type", null: false t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end create_table "active_storage_blobs", force: :cascade do |t| - t.string "key", null: false - t.string "filename", null: false - t.string "content_type" - t.text "metadata" - t.string "service_name", null: false t.integer "byte_size", null: false t.string "checksum" + t.string "content_type" t.datetime "created_at", null: false + t.string "filename", null: false + t.string "key", null: false + t.text "metadata" + t.string "service_name", null: false t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true end @@ -40,45 +40,46 @@ end create_table "logfiles", force: :cascade do |t| - t.integer "report_id" - t.string "ext" - t.binary "data" t.datetime "created_at", precision: nil + t.binary "data" + t.string "ext" + t.integer "report_id" t.datetime "updated_at", precision: nil t.index ["report_id", "ext"], name: "index_logfiles_on_report_id_and_ext", unique: true t.index ["report_id"], name: "index_logfiles_on_report_id" end create_table "recents", force: :cascade do |t| + t.datetime "created_at", null: false + t.string "etag", null: false t.string "name", null: false t.integer "server_id", null: false - t.string "etag", null: false - t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["server_id"], name: "index_recents_on_server_id" end create_table "reports", force: :cascade do |t| - t.integer "server_id" - t.datetime "datetime", precision: nil t.string "branch" + t.datetime "created_at", precision: nil + t.datetime "datetime", precision: nil + t.text "ltsv" + t.string "option" t.integer "revision" + t.integer "server_id" t.text "summary" - t.datetime "created_at", precision: nil t.datetime "updated_at", precision: nil - t.string "option" - t.text "ltsv" t.index ["branch"], name: "index_reports_on_branch" t.index ["datetime"], name: "index_reports_on_datetime" t.index ["server_id", "branch", "option"], name: "index_reports_on_server_id_and_branch_and_option" end create_table "servers", force: :cascade do |t| - t.string "name" - t.string "uri" t.datetime "created_at", precision: nil - t.datetime "updated_at", precision: nil + t.date "eol_date" + t.string "name" t.float "ordinal" + t.datetime "updated_at", precision: nil + t.string "uri" t.index ["name"], name: "index_servers_on_name" end From ef77425815e281eb5fd4c8195b8a2c8575662dd2 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Mon, 27 Jul 2026 07:11:22 +0900 Subject: [PATCH 6/6] Restore schema.rb unintentionally regenerated by db:prepare The dump was a side effect of a local sqlite db:prepare in an unrelated commit, not a deliberate schema update. Co-Authored-By: Claude Fable 5 --- db/schema.rb | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index b6cdd812d..8b12523dd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,26 +10,26 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2024_11_21_042607) do +ActiveRecord::Schema[7.0].define(version: 2023_09_11_072108) do create_table "active_storage_attachments", force: :cascade do |t| - t.bigint "blob_id", null: false - t.datetime "created_at", null: false t.string "name", null: false - t.bigint "record_id", null: false t.string "record_type", null: false + t.bigint "record_id", null: false + t.bigint "blob_id", null: false + t.datetime "created_at", null: false t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id" t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end create_table "active_storage_blobs", force: :cascade do |t| - t.integer "byte_size", null: false - t.string "checksum" - t.string "content_type" - t.datetime "created_at", null: false - t.string "filename", null: false t.string "key", null: false + t.string "filename", null: false + t.string "content_type" t.text "metadata" t.string "service_name", null: false + t.integer "byte_size", null: false + t.string "checksum" + t.datetime "created_at", null: false t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true end @@ -40,46 +40,45 @@ end create_table "logfiles", force: :cascade do |t| - t.datetime "created_at", precision: nil - t.binary "data" - t.string "ext" t.integer "report_id" + t.string "ext" + t.binary "data" + t.datetime "created_at", precision: nil t.datetime "updated_at", precision: nil t.index ["report_id", "ext"], name: "index_logfiles_on_report_id_and_ext", unique: true t.index ["report_id"], name: "index_logfiles_on_report_id" end create_table "recents", force: :cascade do |t| - t.datetime "created_at", null: false - t.string "etag", null: false t.string "name", null: false t.integer "server_id", null: false + t.string "etag", null: false + t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["server_id"], name: "index_recents_on_server_id" end create_table "reports", force: :cascade do |t| - t.string "branch" - t.datetime "created_at", precision: nil + t.integer "server_id" t.datetime "datetime", precision: nil - t.text "ltsv" - t.string "option" + t.string "branch" t.integer "revision" - t.integer "server_id" t.text "summary" + t.datetime "created_at", precision: nil t.datetime "updated_at", precision: nil + t.string "option" + t.text "ltsv" t.index ["branch"], name: "index_reports_on_branch" t.index ["datetime"], name: "index_reports_on_datetime" t.index ["server_id", "branch", "option"], name: "index_reports_on_server_id_and_branch_and_option" end create_table "servers", force: :cascade do |t| - t.datetime "created_at", precision: nil - t.date "eol_date" t.string "name" - t.float "ordinal" - t.datetime "updated_at", precision: nil t.string "uri" + t.datetime "created_at", precision: nil + t.datetime "updated_at", precision: nil + t.float "ordinal" t.index ["name"], name: "index_servers_on_name" end