Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Javascript not working in Production

So far here's what I've done.

  1. I loaded assets in the Capfile: js still not working http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

  2. I moved coffee-rails from the assets to the main section: still not working

    gem 'coffee-rails', '~> 3.2.1'

    group :assets do gem 'sass-rails', '~> 3.2.3' end

UPDATE: Production Environment

SolidAdmin::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

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  Paperclip.options[:command_path] = "/usr/bin/"
  # 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 = true

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

  # 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

  # Defaults to nil and saved in location specified by config.assets.prefix
  # 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
  # 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

Everything else is pretty much default/commented out

like image 493
mystic cola Avatar asked Jul 20 '13 12:07

mystic cola


4 Answers

EDIT: After talking over chat, it was a problem about including jquery twice in the page.

After checking your page (liquid-radio.com), I have seen a great error imo:

<!DOCTYPE html>
<html>
<head>
  <title>liquid.radio</title>
  <link href="/assets/application-c9ed21e2be2e7bb9955d6a0d89357d16.css" media="all" rel="stylesheet" type="text/css" />
  <script src="/assets/application-09500810259983928e0b1b4d46b49071.js" type="text/javascript"></script>
  <meta content="authenticity_token" name="csrf-param" />
<meta content="MYdcXuDSzYg1qSHrRwx0y0VK5VmqhWmLLGiYSOX7pOI=" name="csrf-token" />
</head>
<body style="background: #FFF;">

<!DOCTYPE html>
<html>
    <head>

You have the first part repeated a couple of times, rendering your html invalid.

like image 113
Juan Guerrero Avatar answered Sep 29 '22 21:09

Juan Guerrero


Fixed! Switched:

config.assets.compile = false

to:

config.assets.compile = true

Now it works.

like image 24
mystic cola Avatar answered Sep 29 '22 22:09

mystic cola


I was using rails 4.2.6.

To fix my error, I had to ran the following;

  1. rake assets:clean - This to clean my assets
  2. I had to fix any issues in my application.js file. This was mainly the order in which I was importing external js libraries.
  3. rake assets:precompile - This to pre-compile assets
  4. In config/environments/production.rb, I had to change this line

    config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

    to

    config.serve_static_files = true

This means the rails app can now serve static files generated by assets:precompile

After doing this and restarting the app, all was well!

like image 38
mwangi Avatar answered Sep 29 '22 20:09

mwangi


One issue I see with this is that you'll now have your Rails server (puma, unicorn, etc.) serving your static files. On a production server you'll want your server, for example Nginx, serving those static pages.

If your JS/CSS is working in development then you should only need to run rake assets:precompile before pushing to production. Then it's a matter of configuring your application server to work with your production server.

like image 36
Frederick John Avatar answered Sep 29 '22 21:09

Frederick John