2014-07-08 5 views
6

Abbiamo appena distribuito un'applicazione Rails 4.0.3 alla produzione e abbiamo rilevato che i percorsi di asset generati da e javascript_link_tag mancano le loro impronte digitali. Quindi, invece di richiedere qualcosa come application-c841bd1c82c25bb1de8452d2338479f7.js, la pagina è solo richiesta application.js.Percorsi di rotaie mancanti di impronte digitali in produzione

RAILS_ENV=production bundle exec rake assets:precompile ha esito positivo e genera file di impronte digitali.

I bit da config/environments/production.rb che sembrano rilevanti sono:

# Compress JavaScripts and CSS 
config.assets.compress = true 

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = false 

# Generate digests for assets URLs 
config.assets.digest = true 

# Disable Rails's static asset server (Apache or nginx will already do this) 
config.serve_static_assets = false 

Questo è in esecuzione sul nostro server Apache, non Heroku. Mi sono guardato un po 'in giro e ho riscontrato problemi simili, ma nessuno dei passaggi per la risoluzione dei problemi per chi sta aiutando qui. Grazie.

Ulteriori informazioni

Nel caso in cui è utile, ecco l'intero contenuto (linee commentate rimossi) dei nostri file di configurazione:

application.rb

require File.expand_path('../boot', __FILE__) 

require 'rails/all' 

if defined?(Bundler) 
    # If you precompile assets before deploying to production, use this line 
    Bundler.require(*Rails.groups(:assets => %w(development test))) 
    # If you want your assets lazily compiled in production, use this line 
    # Bundler.require(:default, :assets, Rails.env) 
end 

module Ctrc 
    class Application < Rails::Application 
    config.ceal.application_title = "CTRC Budgeting" 

    config.encoding = "utf-8" 

    config.filter_parameters += [:password] 

    config.active_support.escape_html_entities_in_json = true 

    config.assets.enabled = true 
    config.assets.version = '1.0' 

    config.pmacs_redmine.project_identifier = 'itmat-gcrc' 

    config.app_data_path = '/data/web/apps/itmat/ctrc' 
    config.paperclip_defaults = { 
     path: "/data/web/apps/itmat/ctrc/:attachment/:id/:style/:basename.:extension" 
    } 

    if ENV['RAILS_RELATIVE_URL_ROOT'] 
     config.assets.prefix = ENV['RAILS_RELATIVE_URL_ROOT'] + '/assets' 
    end 
    end 
end 

production.rb

Ctrc::Application.configure do 
    config.cache_classes = true 

    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    config.serve_static_assets = false 
    config.assets.compress = true 
    config.assets.compile = false 
    config.assets.digest = true 

    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

    config.eager_load = true 

end 

So che l'applicazione è in esecuzione in modalità di produzione, perché se ho impostato

config.assets.compile = true 

in quel file, il CSS e JavaScript sono compilati e richiesti in modo corretto.

Sono compresi quelli attivi nella pagina in questo modo:

<%= stylesheet_link_tag "application", media: "all" %> 
<%= javascript_include_tag "application" %> 

ma è ancora generando collegamenti a queste risorse come questo:

<link href="/apps/itmat/ctrc/stylesheets/application.css" media="all" rel="stylesheet"> 
<script src="/apps/itmat/ctrc/javascripts/application.js"></script> 

invece dei link le impronte digitali mi aspetterei vedere.

+0

è 'config.serve_static_assets = false'? – DVG

+0

Lo è. Mi dispiace, non ho incluso quella configurazione per la prima volta. – barendt

+0

hai questo 'config.assets.enabled = true' in' config/application.rb'? – usha

risposta

0

Per rotaie 4.x assicurarsi di impostare la seguente:

config/application.rb

config.assets.enabled = true 
config.assets.version = '1.0' 

config/ambienti/production.rb

config.assets.compile = false 
+0

Ho ricontrollato tutti questi e sono impostati correttamente. – barendt

1

Ho avuto un simile problema e si è rivelato essere un problema con la gemma AssetSync. L'impostazione di config.assets.compile = true o la rimozione della gemma ha risolto il problema. La compilazione immediata delle risorse e il fatto che i tuoi Rails servano le tue risorse potrebbero essere accettabili se stai utilizzando un CDN, ma in genere è consigliabile adottare un altro approccio.