2012-07-19 4 views
0

J'ai l'application rails qui utilise Rails 3.2.6 & Version Ruby 1.9.3p0.J'ai le nombre de fichiers CSS (utilisant JQuery) JS dans mon dossier d'actifs avec le pipeline d'actifs. Tout fonctionne bien mais je passe de de développement à la production avec compression au fichier unique nommé application.css & application.js puis mon plus de JQuery code ne fonctionne pas. J'ai essayé beaucoup de solutions présentes mais rien ne m'aide.Passer du développement à la production dans les rails 3.2.6

S'il vous plaît aider.Merci à l'avance.

Ceci est mon application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
<title>Tritinum <%#= controller.action_name %></title> 
<%= stylesheet_link_tag "application", :media => "all" %> 
<%= javascript_include_tag "application" %> 
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-  ui.min.js", "jquery.rails.js" %> 
<%= stylesheet_link_tag 'http://fonts.googleapis.com/css?family=Droid+Sans:400,700'%> 

<%= csrf_meta_tags %> 
</head> 
<body> 
<!-- BEGIN MAIN --> 

<section id="main" class="container_16"> 
<p class="notice"><%#= notice %></p> 
    <p class="alert"><%= alert %></p> 


    <%= yield %> 


<!-- BEGIN FOOTER --> 
     <section class="footer"> 

     <p> 
<span class="left">�Copyright 2012 - All rights reserved. </span> 
    <span class="right">Web Tool v1.0 - Product By<a href="http://www.google.com">Personal.</a></span> 
     </p> 

     <div class="clear"></div><!-- CLEAR BOTH --> 

    </section><!-- end section .footer --> 
    <!-- END FOOTER --> 

     </section><!-- end section #main --> 
    <!-- END MAIN --> 

    <!-- BEGIN LOADING OVERLAY --> 
    <div id="loading_overlay"> 
    <div class="loading_message round_bottom"> 
     <%= image_tag "loading.gif" %> 
    </div> 
</div> 
<!-- END LOADING OVERLAY --> 
     </body> 
    </html> 

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 Tritinum 
class Application < Rails::Application 
# Settings in config/environments/* take precedence over those specified here. 
# Application configuration should go into files in config/initializers 
# -- all .rb files in that directory are automatically loaded. 

# Custom directories with classes and modules you want to be autoloadable. 
# config.autoload_paths += %W(#{config.root}/extras) 

# Only load the plugins named here, in the order given (default is alphabetical). 
# :all can be used as a placeholder for all plugins not explicitly named. 
# config.plugins = [ :exception_notification, :ssl_requirement, :all ] 

# Activate observers that should always be running. 
# config.active_record.observers = :cacher, :garbage_collector, :forum_observer 

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
# config.time_zone = 'Central Time (US & Canada)' 

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
# config.i18n.default_locale = :de 

# Configure the default encoding used in templates for Ruby 1.9. 
config.encoding = "utf-8" 

# Configure sensitive parameters which will be filtered from the log file. 
config.filter_parameters += [:password] 

# Use SQL instead of Active Record's schema dumper when creating the database. 
# This is necessary if your schema can't be completely dumped by the schema dumper, 
# like if you have constraints or database-specific column types 
# config.active_record.schema_format = :sql 

# Enforce whitelist mode for mass assignment. 
# This will create an empty whitelist of attributes available for mass-assignment for all models 
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible 
# parameters by using an attr_accessible or attr_protected declaration. 
config.active_record.whitelist_attributes = true 

# Enable the asset pipeline 
    config.assets.enabled = true 
    config.assets.initialize_on_precompile = false 
# config.assets.precompile = ['*.css'] 
# Version of your assets, change this if you want to expire all your assets 
    config.assets.version = '1.0' 
end 
end 

production.rb

Tritinum::Application.configure do 
# Settings specified here will take precedence over those in config/application.rb 

# Code is not reloaded between requests 
config.cache_classes = true 

# C hoose the compressors to use 
config.assets.js_compressor = :uglifier 
    config.assets.css_compressor = :yui 
    # Full error reports are disabled and caching is turned on 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

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

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

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

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

    # Defaults to Rails.root.join("public/assets") 
    # config.assets.manifest = YOUR_PATH 

    # Specifies the header that your server uses for sending files 
    # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache 
    # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

     # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 
    # config.force_ssl = true 

     # See everything in the log (default is :info) 
     # config.log_level = :debug 

     # Prepend all log lines with the following tags 
    # config.log_tags = [ :subdomain, :uuid ] 

     # Use a different logger for distributed setups 
     # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) 

     # Use a different cache store in production 
      # config.cache_store = :mem_cache_store 

      # Enable serving of images, stylesheets, and JavaScripts from an asset server 
      # config.action_controller.asset_host = "http://assets.example.com" 

     # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) 
     # config.assets.precompile += %w(search.js) 

     # Disable delivery errors, bad email addresses will be ignored 
     # config.action_mailer.raise_delivery_errors = false 

     # Enable threaded mode 
       # config.threadsafe! 

     # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
     # the I18n.default_locale when a translation can not be found) 
     config.i18n.fallbacks = true 

    # Send deprecation notices to registered listeners 
     config.active_support.deprecation = :notify 

      # Log the query plan for queries taking more than this (works 
      # with SQLite, MySQL, and PostgreSQL) 
      # config.active_record.auto_explain_threshold_in_seconds = 0.5 
     end 

Alors, je commence serveur rails dans la production après la compilation avec cette commande

RAILS_ENV=production bundle exec rake assets:precompile 

La plupart de mon code JQuery cesse de fonctionner.

Gemfile

source 'https://rubygems.org' 

gem 'rails', '3.2.3' 
gem 'haml' 

# Bundle edge Rails instead: 
# gem 'rails', :git => 'git://github.com/rails/rails.git' 
gem 'wkhtmltopdf-binary' 
gem 'sqlite3' 
gem 'devise' 
gem 'cancan' 
gem 'faker' 
gem 'rb-readline' 
gem 'paperclip' 
gem 'wicked_pdf' 
gem "nested_form", :git => 'https://github.com/ryanb/nested_form.git' 



# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
gem 'sass-rails', '~> 3.2.3' 
gem 'coffee-rails', '~> 3.2.1' 

# See https://github.com/sstephenson/execjs#readme for more supported runtimes 
    # gem 'therubyracer', :platform => :ruby 

    gem 'uglifier', '>= 1.0.3' 
    end 

gem 'jquery-rails' 

# To use ActiveModel has_secure_password 
    # gem 'bcrypt-ruby', '~> 3.0.0' 

     # To use Jbuilder templates for JSON 
     # gem 'jbuilder' 

    # Use unicorn as the app server 
     # gem 'unicorn' 

     # Deploy with Capistrano 
     # gem 'capistrano' 

    # To use debugger 
     # gem 'ruby-debug19', :require => 'ruby-debug' 

app/assets/JavaScripts/application.js fichier

// This is a manifest file that'll be compiled into application.js, which will include all the files 
// listed below. 
// 
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. 
// 
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 
// the compiled file. 
// 
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD 
// GO AFTER THE REQUIRES BELOW. 
// 
//= require jquery_nested_form 
//= require jquery 
//= require jquery_ujs 
//= require_tree . 
    function remove_fields(link) { 
    $(link).previous("input[type=hidden]").value = "1"; 
    $(link).up(".fields").hide(); 
    } 
    $(document).ready(function(){ 
    $("select#finding_category_id").change(function(){ 
     var id_value_string = $(this).val(); 
     if (id_value_string == "") { 
      // if the id is empty remove all the sub_selection options from being selectable and do not do any ajax 
      $("select#finding_finding_template_id option").remove(); 
      var row = "<option value=\"" + "" + "\">" + "" + "</option>"; 
      $(row).appendTo("select#finding_finding_template_id"); 
     } 
     else { 
      // Send the request and update sub category dropdown 
      $.ajax({ 
       dataType: "json", 
       cache: false, 
       url: '/finding_templates/for_categoryid/' + id_value_string, 
       error: function(XMLHttpRequest, errorTextStatus, error){ 
        alert("Failed to submit : "+ errorTextStatus+" ;"+error); 
       }, 
       success: function(data){      
        // Clear all options from sub category select 
        $("select#finding_finding_template_id option").remove(); 
        //put in a empty default line 
        var row = "<option value=\"" + "Select" + "\">" + "" + "</option>"; 
        $(row).appendTo("select#finding_finding_template_id");       
        // Fill sub category select 
        $.each(data, function(i, j){ 
         row = "<option value=\"" + j.finding_template.id + "\">" +   j.finding_template.name + "</option>"; 
         $(row).appendTo("select#finding_finding_template_id");      
        });    
       } 
      }); 
     }; 
      }); 
    }); 

S'il vous plaît aider Somone

+0

S'il vous plaît, montrez votre Gemfile – kr00lix

+0

S'il vous plaît, vérifiez-le. –

Répondre

2
config.assets.initialize_on_precompile = false 

^Cette ligne dans votre application.rb est de dire la fonction de précompilation à précompiler paresseusement. Cela signifie qu'il ne précompilera les actifs que dans votre application principale. Si vous définissez cette valeur sur true, il sera possible de pré-compiler les ressources incluses dans d'autres gemmes référencées. Donc, sauf si vous avez les fichiers jquery explicitement dans le dossier des actifs de votre application, il est probablement manqué sur la pré-compilation - il n'est donc pas inclus dans votre application.js.

NOTE

Cette ligne: config.assets.compile = true devrait dire à votre demande de revenir à la canalisation d'actifs si un actif pré-compilé est manquée - idéalement cela signifierait qu'il trouverait l'actif jquery de la pipeline normal.

Cependant je suppose que depuis techniquement il ne trouve application.js, votre application ne sait pas qu'il ya eu un bien manqué, il charge le pré-compilé application.js et alors il n'y a aucun moyen il peut obtenir le jquery code.

Solution

Désolé pour l'explication de longue haleine, mais s'il vous plaît essayez ce qui suit - Définissez la ligne suivante dans votre config/application.rb

config.assets.initialize_on_precompile 

être true

Et puis vous Bien sûr, il faut reconstruire et redéployer :) Faites-moi savoir si cela aide !!

+0

Que signifie ** reconstruire ** ici. –

+0

Par reconstruction, je veux juste dire que vous devrez redémarrer (désolé, j'utilise maven pour empaqueter un fichier WAR) Essentiellement, si vous l'exécutez localement, vous devez redémarrer le serveur rails, et si vous l'exécutez dans mode de production, vous devez créer un nouveau fichier WAR – Krista

0

Le joyau jquery-rails a déjà jquery-ui.min.js

vous avez juste besoin d'ajouter cette ligne à assets/javascript/application.js fichier

//= require jquery //= require jquery_ujs

et ne dispose que cette ligne dans application.html.erb

<%= javascript_include_tag "application" %>

+0

donc je dois retirer 'jquery-ui.min.js' de' application.html.erb' et ajouter ceci '// = require jquery // = require jquery_ujs' à' application.js' –

+0

je les ai déjà en mon 'application.js' & je change mon' appliction.html.erb' pour avoir cette ligne '<% = javascript_include_tag" application "%>' –

+0

S'il vous plaît me fournir le moyen possible de ce problème. –

Questions connexes