资产管道导轨Heroku

问题描述 投票:1回答:1

最近我将我的项目升级到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 installbundle exec rake assets:precompile RAILS_ENV=production,将新的'public'文件夹添加到我的git中,承诺并推送我的git,最后将所有内容推送到heroku。

但它不起作用,显示图像的“alt”。使用检查器,我可以看到html中的图像遵循图像的正常URL而不是带有指纹的图像,因此助手asset_path似乎无法正常工作。

这是我在production.rbconfig/environments

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

我在'config'中的'application.rb':

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'
ruby git heroku ruby-on-rails-5 asset-pipeline
1个回答
2
投票

资产管道基本上有两个用例:

首先,它将各种样式表或javascript文件预编译并组合成单个包。能够预编译 - 例如 - SCSS到CSS简化了开发。并且可以比许多小文件更快地下载一个大的组合文件。

其次,它为文件名添加了哈希值。这允许长时间缓存这些文件,这也提高了性能。即使其中一个文件只有一个小的变化,那么散列和文件名也会改变。更改的文件名不在缓存中,因此浏览器会立即重新加载文件。

但在你的情况下,你的图像无论如何都是静态的。没有必要预编译图像并将哈希添加到不应该更改的文件中。

因此,我只是将这些图像直接放入公共文件夹,并绕过这种静态图像的资产管道。

© www.soinside.com 2019 - 2024. All rights reserved.