0

I'm trying to deploy a rails app but I'm stuck with an asset pre-compilation error. According to the production log the error is being caused by a 'Blueprint' css script called screen.css (as you can see in the error output below). However according to the production log, this asset does in fact get pre-compiled. I've tried explicitly adding screen.css and print.css to the precompile array, both in the application.rb and config/environments/production.rb files as follows

config.assets.precompile = %w(screen.css print.css)

but to no avail. I've also tried precompiling my assets locally and pushing the whole thing to the server. I've tried all the suggestions outlined here: blueprint/screen.css isn't precompiled and here: blueprint css rails 3.1 help and the same problem remains unresolved here: Ruby on Rails 3.2 compiled assets are not working

I have no idea what to try next to resolve this error. Any help would be hugely appreciated! The log output is below, along with my deploy file, cap file and application.rb file. Thanks in advance for any suggestions you might have!

Here's some output from the log file after deploy where you can see that screen.css gets pre-compiled. The error output follows:

Compiled application.js  (5ms)  (pid 16431)
Compiled jquery.js  (2ms)  (pid 16431)
Compiled jquery_ujs.js  (0ms)  (pid 16431)
Compiled microposts.js  (94ms)  (pid 16431)
Compiled pages.js  (1ms)  (pid 16431)
Compiled sessions.js  (0ms)  (pid 16431)
Compiled users.js  (0ms)  (pid 16431)
Compiled application.css  (17ms)  (pid 16431)
Compiled blueprint/ie.css  (0ms)  (pid 16431)
Compiled blueprint/plugins/buttons/screen.css  (0ms)  (pid 16431)
Compiled blueprint/plugins/fancy-type/screen.css  (0ms)  (pid 16431)
Compiled blueprint/plugins/link-icons/screen.css  (0ms)  (pid 16431)
Compiled blueprint/plugins/rtl/screen.css  (0ms)  (pid 16431)
Compiled blueprint/print.css  (0ms)  (pid 16431)
Compiled blueprint/screen.css  (0ms)  (pid 16431)
Compiled blueprint/src/forms.css  (0ms)  (pid 16431)
Compiled blueprint/src/grid.css  (0ms)  (pid 16431)
Compiled blueprint/src/ie.css  (0ms)  (pid 16431)
Compiled blueprint/src/print.css  (0ms)  (pid 16431)
Compiled blueprint/src/reset.css  (0ms)  (pid 16431)
Compiled blueprint/src/typography.css  (0ms)  (pid 16431)
Compiled custom.css  (0ms)  (pid 16431)
Compiled microposts.css  (13ms)  (pid 16431)
Compiled pages.css  (1ms)  (pid 16431)
Compiled scaffolds.css  (15ms)  (pid 16431)
Compiled sessions.css  (1ms)  (pid 16431)
Compiled users.css  (1ms)  (pid 16431)

Started GET "/" for 12.13.14.15 at 2012-04-05 14:15:50 -0700
Processing by PagesController#home as HTML
Rendered pages/home.html.erb within layouts/application (1.1ms)
Rendered layouts/_stylesheets.html.erb (1.3ms)
Completed 500 Internal Server Error in 6ms

ActionView::Template::Error (blueprint/screen.css isn't precompiled):
    1: <!--[if lt IE9]>
    2: <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    3: <![endif]-->
    4: <%= stylesheet_link_tag 'blueprint/screen', :media => 'screen' %>
    5: <%= stylesheet_link_tag 'blueprint/print', :media => 'print' %>
    6: <!--[if lt IE 8]><%= stylesheet_link_tag 'blueprint/ie' %><![endif]-->
    7: <%= stylesheet_link_tag 'custom', :media => 'screen' %>
  app/views/layouts/_stylesheets.html.erb:4:in `_app_views_layouts__stylesheets_html_erb___2010157553399413981_33056460'
  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb__4294160261947576619_31749320'

And here's the deploy file:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
require "bundler/capistrano"

set :application, "Project"

set :scm, "git"
set :repository,  "ssh://server.example.ca/usr/local/git_root/project.git"
set :user, "deploy"

#set :rvm_bin_path, "/usr/local/rvm/bin"
set :rvm_ruby_string, "ruby-1.9.2-p290@project"
set :normalize_asset_timestamps, false

ssh_options[:forward_agent] = true

set :branch, "master"

set :deploy_via, :remote_cache

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/usr/local/www/sites/project.example.ca/"

set :use_sudo, false

set :domain, 'project.example.ca'

role :app, domain
role :web, domain
role :db,  domain, :primary => true

before "deploy:symlink", "assets:precompile"

namespace :assets do
  desc "Compile assets"
  task :precompile, :roles => :app do
    run "cd #{release_path} && bundle exec rake RAILS_ENV=#{rails_env} assets:precompile"
  end
end

Here's my capfile:

load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
load 'deploy/assets'

Here's the application.rb config file:

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 Arbiterapi
  class Application < Rails::Application

    # 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]

    # Enable the asset pipeline
    config.assets.enabled = true

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'

    # Precompile problem assets
    config.assets.precompile = %w(screen.css print.css)

  end
end
Community
  • 1
  • 1
J K
  • 495
  • 2
  • 7
  • 22
  • Could you show whats in your application.css ? Maybe you haven't added all the required css files there. Could you try running this `bundle exec rake assets:precompile` on your local dev machine and then copying the entire public folder to your production server. Also as a last resort try setting config.assets.compile to true in config/environments/production.rb. – Sebi May 10 '12 at 06:31
  • My application.css file is empty, except for this automatically generated comment: /* * This is a manifest file that'll automatically include all the stylesheets available in this directory * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at * the top of the compiled file, but it's generally better to create a new file per style scope. *= require_self *= require_tree . */ – J K May 10 '12 at 18:57
  • I've also already tried pre-compiling assets on my local machine via `bundle exec rake assets:precompile` and then pushing my git repository to my remote server, and subsequently running `cap deploy:update`. After this, all the pre-compiled assets are in the public folder on my webserver as they should be. – J K May 10 '12 at 19:03
  • I also tried setting `config.assets.compile` to true without any luck. But I didn't put all that much effort into this strategy given that I shouldn't have to rely on live compiling to solve this problem. Argh – J K May 10 '12 at 19:05
  • Is there something I can add to application.css that might help? Thanks for your help btw. – J K May 10 '12 at 19:07
  • 1
    in one of the links in the question someone has mentioned adding `*= require_tree ./blueprint` to the application.css file. Could you try this. – Sebi May 11 '12 at 07:11
  • Also please check if `config.serve_static_assets` is set to true in production.rb – Sebi May 11 '12 at 07:20
  • by the way is your blueprint folder in the app/assets/stylesheets folder or outside it? – Sebi May 11 '12 at 07:53
  • The blueprint folder is inside app/assets/stylesheets. I added `*= require_tree ./blueprint` within the commented out section of application.css which fixed the internal server error 500 caused by screen.css. However, I then had to add another css file to the pre-compile array. Seems to be working now though! Thanks so much for the suggestion! One last thing... I don't understand why putting some code into the commented out section of a css file has any effect! Could you explain? – J K May 14 '12 at 16:42
  • Rails has a custom pre-processor that processes the manifest file. What looks like a comment to us in this case is actually an include directive of sorts. If you loaded that exact file directly into your browser, it would be treated as a comment. The pre-processor does not see it that way though. – juanpaco Jan 18 '13 at 19:58

1 Answers1

0

I ran into the same problem. But it turns out my missing asset was compiled into application.js (as it merges all files), so I simply had to remove the reference to the specific file (webcam.js in my case).

Your files are merged into application.css etc...

Hugo Logmans
  • 2,202
  • 1
  • 19
  • 14