Rails: Javascript not working in Production
Asked Answered
M

4

5

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

Misguided answered 20/7, 2013 at 12:57 Comment(7)
What do you mean when you say that js is not working? Your js files are not loaded compiled js file or something else?Vish
I'm loading all the js from at outside server. For example I'm loading jquery from google and I'm loading another script from another server and neither one of them is showing up in production. Both are showing up in dev. I'll update my post.Misguided
What does the setup of your production environment look like?Odonto
Ok. I'll post that in one sec.Misguided
Updated with production environment.Misguided
Perhaps if you post a link to that production environment we can mess around and check what's happening?Brandling
liquid-radio.comMisguided
B
5

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.

Brandling answered 22/7, 2013 at 13:0 Comment(6)
I didn't actually... That's the application.html.erb... (which I only discovered existed last night.) Hmm... So it seems I'll have to copy and paste my header and footer there (which will save me a pain in the ass anyway.) I'll report back with what happens.Misguided
Nope! I updated the application.html.erb and included all the info I had been putting on the pages... It still isn't loading the javascript. In fact... if you go to the page right now (I'll probably change it soon) I'm even calling up one of the scripts right on the application.html.erb and it's still not working...Misguided
Do you mind sharing both application.html.erb and the root view code? Or even better, a link to the repo if this is opensourcedBrandling
@mysticcola Checking your page's source code again, I found that you are including jquery twice(one inside application.js, probably through jquery-rails gem, and another one from google cdn). Also, you have 2 body opening tags. Anywhere I can hit you up personally (skype, whatever), as this isn't a problem about javascript anymore?Brandling
There's actually a chat built into StackOverflow... but I have no idea how to use it. :) I used it once though. But hit me up on Yahoo messenger if you have it. The name is mysticcolaMisguided
let us continue this discussion in chatMisguided
M
5

Fixed! Switched:

config.assets.compile = false

to:

config.assets.compile = true

Now it works.

Misguided answered 21/7, 2013 at 18:24 Comment(3)
This isn't the best way, as it means that you can probably recompile assets on production if you aren't careful. It's better to use rake assets:precompile before deploying to production.Brandling
Well I tried that Juan... nothing happened. I tried that, I tried everything you see above... It's a really weird problem to have. I don't understand why it does this.Misguided
@JuanGuerrero I ran rake assets:precompile locally and pushed the generated files to production. That worked for meObloquy
B
5

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.

Brandling answered 22/7, 2013 at 13:0 Comment(6)
I didn't actually... That's the application.html.erb... (which I only discovered existed last night.) Hmm... So it seems I'll have to copy and paste my header and footer there (which will save me a pain in the ass anyway.) I'll report back with what happens.Misguided
Nope! I updated the application.html.erb and included all the info I had been putting on the pages... It still isn't loading the javascript. In fact... if you go to the page right now (I'll probably change it soon) I'm even calling up one of the scripts right on the application.html.erb and it's still not working...Misguided
Do you mind sharing both application.html.erb and the root view code? Or even better, a link to the repo if this is opensourcedBrandling
@mysticcola Checking your page's source code again, I found that you are including jquery twice(one inside application.js, probably through jquery-rails gem, and another one from google cdn). Also, you have 2 body opening tags. Anywhere I can hit you up personally (skype, whatever), as this isn't a problem about javascript anymore?Brandling
There's actually a chat built into StackOverflow... but I have no idea how to use it. :) I used it once though. But hit me up on Yahoo messenger if you have it. The name is mysticcolaMisguided
let us continue this discussion in chatMisguided
C
4

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!

Conjunct answered 20/8, 2016 at 21:38 Comment(0)
B
1

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.

Bracey answered 6/2, 2017 at 5:30 Comment(1)
Thanks. Worked running rake assets:precompile locally and pushing the changes to production.Orndorff

© 2022 - 2024 — McMap. All rights reserved.