сохраняйте предварительную компиляцию ресурсов с помощью rails 6 и маршрута «/assets/bootstrap.min.css», который не найден

#routes #assets #ruby-on-rails-6 #precompile

Вопрос:

Я знаю, что на самом деле это не очень хорошая практика, но я сохранил свое приложение rails для предварительной компиляции активов, также в производстве. Поскольку мое приложение rails вручную обновлено с более старых версий (первой была rails 2.1), я также сохранил дерево с папкой /приложение/активы/ в корневой папке…

Это некоторые из настроек:

/app/assets/config/manifest.js

 //= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
//= link_directory ../stylesheets .scss
 

/app/assets/javascripts/application.js

 //= require jquery3
//= require popper
//= require bootstrap-sprockets
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-datepicker
//= require bootstrap-datepicker/core
//= require bootstrap-datepicker/locales/bootstrap-datepicker.fr.js
//= require moment
//= require moment/fr.js
//= require bootstrap-datetimepicker
//= require_tree ../../../vendor/assets/javascripts/.
//= require_tree .
 

/приложение/активы/таблицы стилей/application.scss

 // "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables"
@import 'bootstrap-sprockets';
@import 'bootstrap';
@import 'font-awesome-sprockets';
@import 'font-awesome';
@import 'bootstrap-datetimepicker';
@import 'simple_calendar';
@import 'aide';
@import 'back_to_top';
@import 'calendar';
@import 'films';
@import 'nav';
@import 'pdf';
@import 'scaffolds';
@import 'seances';
@import "*";
@import "../../../vendor/assets/stylesheets/*";


@font-face {
  font-family: 'Glyphicons Halflings';
  src: url(asset_path('glyphicons-halflings-regular.eot'));
  src: url(asset_path('glyphicons-halflings-regular.eot?#iefix')) format('embedded-opentype'),
  url(asset_path('glyphicons-halflings-regular.woff')) format('woff'),
  url(asset_path('glyphicons-halflings-regular.ttf')) format('truetype'),
  url(asset_path('glyphicons-halflings-regular.svg#glyphicons_halflingsregular')) format('svg');
}
 

/приложение/представления/макеты/приложение.html.erb

 <!DOCTYPE html>
<html>
  <head>
    <title>PlanningsCinema</title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

    <meta name="viewport" content="width=device-width">
  </head>
  <body>
    <%= render "layouts/nav" %>
    <%= render "layouts/connexion" %>
      <p id="notice"><%= flash[:notice] %></p>
      <p id="error"><%= flash[:error] %></p>
    <div class="container">
      <%= yield %>
    </div>
  </body>
  <footer>
    <%= render "layouts/footer" %>
  </footer>
</html>
 

/config/application.rb

 require_relative 'boot'
require 'rails/all'

ActiveSupport::Deprecation.silenced = true
Bundler.require(*Rails.groups)


module PlanningsCinema
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0
    config.autoload = :classic

    config.autoload_paths  = %W(#{config.root}/lib)
    config.eager_load_paths  = %W(#{config.root}/lib)
    config.assets.paths << Rails.root.join('vendor', 'assets', 'font', 'images', "*" )
    config.assets.precompile  = ['rails_admin/rails_admin.css', 'rails_admin/rails_admin.js','pdf.css', 'pdf.js', 'scroll.js']
    config.assets.enabled = true
    config.time_zone = 'Paris'
    config.beginning_of_week = :wednesday
    config.i18n.load_path  = Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
    config.i18n.fallbacks = true
    config.i18n.default_locale = :fr
  end
end
 

/config/environments/development.rb

 Rails.application.configure do    
[...]
config.assets.debug = true

  # Suppress logger output for asset requests.
  config.assets.quiet = true
[...]
end
 

/config/environments/production.rb

 Rails.application.configure do
  [...]
  config.eager_load = true
  [...]
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
 
  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier

  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = true
 end
 

/config/initializers/assets.rb

 # Be sure to restart your server when you modify this file.

# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'

# Add additional assets to the asset load path.
# Rails.application.config.assets.paths << Emoji.images_path
# Add Yarn node_modules folder to the asset load path.
# Add additional assets to the asset load path
Rails.application.config.assets.paths  = [
  Rails.root.join('vendor', 'assets', 'node_modules').to_s
]

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile  = [
  Rails.root.join('vendor/assets/javascripts/*').to_s,
  Rails.root.join('vendor/assets/stylesheets/*').to_s
]

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in the app/assets
# folder are already added.
Rails.application.config.assets.precompile  = %w( assets/images/*)
 

Gemfile

 source 'https://rubygems.org'
ruby '3.0.0'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails-i18n'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails'
# Use Puma as the app server
gem 'puma'
# Use SCSS for stylesheets
gem 'sass-rails'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails'
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder'
gem 'popper_js'
gem 'bootsnap'
gem 'bcrypt'
gem 'sorcery'
gem 'cancancan'
gem 'rails_admin_import'
gem 'rails_admin'
gem "font-awesome-rails"
gem "font-awesome-sass"
gem 'kaminari'
gem "rack-pjax"
gem 'nokogiri'
gem 'rchardet'
gem 'simple_xlsx_reader'
gem 'wkhtmltopdf_binary'
gem 'wicked_pdf'
gem 'ransack'
gem 'httparty'
gem 'listen'
gem "simple_calendar"
gem 'bootstrap-datepicker-rails'
gem 'momentjs-rails'
gem 'bootstrap3-datetimepicker-rails'
gem 'will_paginate'
gem 'charlock_holmes'
# => gem 'webpack'
gem 'bootstrap-sass'
gem 'autoprefixer-rails'
gem 'sassc-rails', '>= 2.1.0'
gem 'sprockets'
gem 'sprockets-rails', :require => 'sprockets/railtie'
gem 'figaro'
    
group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  # Use sqlite3 as the database for Active Record
  #gem 'sqlite3'
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen'
end
 
group :production do
  gem 'rails_12factor'
  gem 'pg'
end
 

Активы работают после предварительной компиляции rake asssets:precompile . Но у меня все еще есть это сообщение об ошибке маршрута только в выводе консоли, это не нарушает работу приложения в локальной разработке или в производстве.

ActionController::RoutingError (No route matches [GET] "/assets/bootstrap.min.css")

Я уверен, что мог бы оптимизировать и улучшить конфигурацию… Возможно, с помощью webpacker, но на данный момент я не нашел, как это сделать, не нарушая своих взглядов…