我正在尝试部署一个 Rails 应用程序,但我遇到了资产预编译错误。根据生产日志,错误是由名为 screen.css 的“蓝图”css 脚本引起的(如您在下面的错误输出中所见)。然而,根据生产日志,该资产实际上是经过预编译的。我尝试在 application.rb 和 config/environments/production.rb 文件中显式添加 screen.css 和 print.css 到预编译数组,如下所示
config.assets.precompile = %w(screen.css print.css)
但无济于事。我还尝试在本地预编译我的资产并将整个内容推送到服务器。我已经尝试了这里列出的所有建议:blueprint/screen.css 没有预编译 ,这里: blueprint css rails 3.1 help ,同样的问题在这里仍未解决:Ruby on Rails 3.2 编译的资产不起作用
我不知道接下来要尝试什么来解决此错误。任何帮助将不胜感激!下面是日志输出,以及我的部署文件、cap 文件和 application.rb 文件。提前感谢您提出的任何建议!
这是部署后日志文件的一些输出,您可以在其中看到 screen.css 已预编译。错误输出如下:
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'
这是部署文件:
$:.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
这是我的capfile:
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
load 'config/deploy'
load 'deploy/assets'
这是 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 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