#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, но на данный момент я не нашел, как это сделать, не нарушая своих взглядов…