资产管道 rails Heroku
Assets pipeline rails Heroku
最近我将我的项目升级到 Rails 5,当我试图将所有内容上传到 Heroku 时,我对资产管道感到疯狂。
问题如下:我有一组 Ejercicios,当您单击其中一个时,应用程序应显示其信息,包括图像。图像的路径像这样 img1: "ejercicios/abdominales/1_4_I1.bmp"
存储在我的数据库中。例如,该文件位于 app/assets/images/ejercicios/abdominales/1_4_I1.bmp
.
相关视图 show.html.haml
打印这样的图像:= image_tag(@ejercicio.img1) if @ejercicio.img1?
。
它在本地运行良好,但在 Heroku 的生产环境中运行不佳,因此请阅读 the assets pipeline 以使其正常运行。所以我像这样更改了我的 show.html.haml
:= image_tag asset_path(@ejercicio.img1) if @ejercicio.img1?
并在 Gemfile 和 application.rb 中添加了教程提到的行。执行的 bundle install
和 bundle exec rake assets:precompile RAILS_ENV=production
,将新的 'public' 文件夹添加到我的 git,提交并推送我的 git,最后将所有内容推送到 heroku。
但是不行,显示了图片的'alt'。使用检查器我可以看到 html 中的图像遵循正常的 url 图像而不是带有指纹的图像,因此助手 asset_path
似乎无法正常工作。
这是我在 config/environments
中的 production.rb
KeepMeFit::Application.configure do
config.eager_load = true
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = falsenginx
config.force_ssl = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.action_mailer.default_url_options = { :host => "http://keepmefit.herokuapp.com/"}
end
我的 'application.rb' 在 'config':
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'will_paginate/array'
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module KeepMeFit
class Application < Rails::Application
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :es
config.encoding = "utf-8"
config.filter_parameters += [:password, :password_confirmation]
config.active_support.escape_html_entities_in_json = true
config.assets.enabled = true
config.serve_static_assets = true
config.assets.initialize_on_precompile = false
config.assets.version = '1.0'
end
end
还有我的 Gemfile:
source 'https://rubygems.org'
ruby '2.3.3'
gem 'rails', '5.1.4'
group :development, :test do
gem 'sqlite3'
gem 'activemodel'
gem 'json'
gem 'rspec-rails'
gem 'guard-rspec'
gem 'rb-notifu'
# gem 'railroady'
end
gem 'rails_12factor', group: :production
group :production do
gem 'pg'
end
group :test do
gem 'capybara'
gem 'factory_girl_rails', '4.1.0'
gem 'launchy'
end
group :development do
gem 'annotate'
gem 'better_errors'
gem 'binding_of_caller'
gem 'meta_request'
end
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'coffee-script-source', '1.8.0'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'bcrypt', '~> 3.1.11', platforms: [:ruby, :x64_mingw, :mingw]
gem 'haml'
gem 'haml-rails'
gem 'bootstrap-sass'
require 'rbconfig'
gem 'wdm', '>= 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
gem 'modernizr-rails'
#gem "font-awesome-rails"
gem 'bootstrap-datepicker-rails'
gem 'tzinfo-data'
gem 'faker', '1.1.2'
gem 'will_paginate', '~> 3.1.0'
gem 'bootstrap-will_paginate'
gem 'turbolinks'
gem 'jquery-turbolinks'
gem 'friendly_id'
gem 'gon'
gem 'cloudinary'
资产管道基本上有两个用例:
首先,它预编译各种样式表或 javascript 文件并将其组合成单个包。能够预编译 - 例如 - SCSS 到 CSS 简化了开发。一个大的组合文件可以比许多小文件更快地下载。
其次,它向文件名添加哈希值。这允许长时间缓存这些文件,从而提高性能。即使其中一个文件只有很小的变化,哈希值和文件名也会发生变化。更改后的文件名不会在缓存中,因此浏览器会立即重新加载文件。
但在您的情况下,您的图像无论如何都是静态的。预编译图像和向不应更改的文件添加哈希是没有意义的。
因此,我会将这些图像直接放入 public 文件夹中,并绕过此类静态图像的资产管道。
最近我将我的项目升级到 Rails 5,当我试图将所有内容上传到 Heroku 时,我对资产管道感到疯狂。
问题如下:我有一组 Ejercicios,当您单击其中一个时,应用程序应显示其信息,包括图像。图像的路径像这样 img1: "ejercicios/abdominales/1_4_I1.bmp"
存储在我的数据库中。例如,该文件位于 app/assets/images/ejercicios/abdominales/1_4_I1.bmp
.
相关视图 show.html.haml
打印这样的图像:= image_tag(@ejercicio.img1) if @ejercicio.img1?
。
它在本地运行良好,但在 Heroku 的生产环境中运行不佳,因此请阅读 the assets pipeline 以使其正常运行。所以我像这样更改了我的 show.html.haml
:= image_tag asset_path(@ejercicio.img1) if @ejercicio.img1?
并在 Gemfile 和 application.rb 中添加了教程提到的行。执行的 bundle install
和 bundle exec rake assets:precompile RAILS_ENV=production
,将新的 'public' 文件夹添加到我的 git,提交并推送我的 git,最后将所有内容推送到 heroku。
但是不行,显示了图片的'alt'。使用检查器我可以看到 html 中的图像遵循正常的 url 图像而不是带有指纹的图像,因此助手 asset_path
似乎无法正常工作。
这是我在 config/environments
production.rb
KeepMeFit::Application.configure do
config.eager_load = true
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = true
config.assets.compress = true
config.assets.compile = true
config.assets.digest = falsenginx
config.force_ssl = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.action_mailer.default_url_options = { :host => "http://keepmefit.herokuapp.com/"}
end
我的 'application.rb' 在 'config':
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'will_paginate/array'
if defined?(Bundler)
Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module KeepMeFit
class Application < Rails::Application
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :es
config.encoding = "utf-8"
config.filter_parameters += [:password, :password_confirmation]
config.active_support.escape_html_entities_in_json = true
config.assets.enabled = true
config.serve_static_assets = true
config.assets.initialize_on_precompile = false
config.assets.version = '1.0'
end
end
还有我的 Gemfile:
source 'https://rubygems.org'
ruby '2.3.3'
gem 'rails', '5.1.4'
group :development, :test do
gem 'sqlite3'
gem 'activemodel'
gem 'json'
gem 'rspec-rails'
gem 'guard-rspec'
gem 'rb-notifu'
# gem 'railroady'
end
gem 'rails_12factor', group: :production
group :production do
gem 'pg'
end
group :test do
gem 'capybara'
gem 'factory_girl_rails', '4.1.0'
gem 'launchy'
end
group :development do
gem 'annotate'
gem 'better_errors'
gem 'binding_of_caller'
gem 'meta_request'
end
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'coffee-script-source', '1.8.0'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem 'bcrypt', '~> 3.1.11', platforms: [:ruby, :x64_mingw, :mingw]
gem 'haml'
gem 'haml-rails'
gem 'bootstrap-sass'
require 'rbconfig'
gem 'wdm', '>= 0.1.0' if RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
gem 'modernizr-rails'
#gem "font-awesome-rails"
gem 'bootstrap-datepicker-rails'
gem 'tzinfo-data'
gem 'faker', '1.1.2'
gem 'will_paginate', '~> 3.1.0'
gem 'bootstrap-will_paginate'
gem 'turbolinks'
gem 'jquery-turbolinks'
gem 'friendly_id'
gem 'gon'
gem 'cloudinary'
资产管道基本上有两个用例:
首先,它预编译各种样式表或 javascript 文件并将其组合成单个包。能够预编译 - 例如 - SCSS 到 CSS 简化了开发。一个大的组合文件可以比许多小文件更快地下载。
其次,它向文件名添加哈希值。这允许长时间缓存这些文件,从而提高性能。即使其中一个文件只有很小的变化,哈希值和文件名也会发生变化。更改后的文件名不会在缓存中,因此浏览器会立即重新加载文件。
但在您的情况下,您的图像无论如何都是静态的。预编译图像和向不应更改的文件添加哈希是没有意义的。
因此,我会将这些图像直接放入 public 文件夹中,并绕过此类静态图像的资产管道。