我用一个简单的带有索引函数的页面控制器做了一个基本的rails应用程序,当我加载页面时,我得到:

ActionView::Template::Error (application.css isn't precompiled):
    2: <html>
    3: <head>
    4:   <title>Demo</title>
    5:   <%= stylesheet_link_tag    "application" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400'

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

gem 'execjs'
gem 'therubyracer'

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

gem 'jquery-rails'

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

# Deploy with Capistrano
# gem 'capistrano'

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

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

当前回答

默认情况下,Rails假定您已经在生产环境中预编译了您的文件,如果您想在生产环境中使用实时编译(在运行时编译您的资产),您必须将config.assets.compile设置为true。

# config/environments/production.rb
...
config.assets.compile = true
...

当您使用预编译的资产,但有任何丢失的预编译文件时,您可以使用此选项回退到链轮。

如果config.assets.compile选项设置为false,并且有丢失的预编译文件,您将得到一个“AssetNoPrecompiledError”,指示丢失的文件的名称。

其他回答

默认情况下,Rails假定您已经在生产环境中预编译了您的文件,如果您想在生产环境中使用实时编译(在运行时编译您的资产),您必须将config.assets.compile设置为true。

# config/environments/production.rb
...
config.assets.compile = true
...

当您使用预编译的资产,但有任何丢失的预编译文件时,您可以使用此选项回退到链轮。

如果config.assets.compile选项设置为false,并且有丢失的预编译文件,您将得到一个“AssetNoPrecompiledError”,指示丢失的文件的名称。

如果在生产环境中将config.assets.compile设置为false,您将在生产环境中获得更好的性能。Rb和预编译你的资产。你可以用这个rake任务预编译:

bundle exec rake assets:precompile

如果您正在使用Capistrano,版本2.8.0有一个在部署时处理这个问题的方法。要了解更多信息,请参阅资产管道指南的“生产中”部分: http://guides.rubyonrails.org/asset_pipeline.html

在Heroku上解决这个问题的另一种方法是:确保你的Rakefile被提交和推送。

在heroku服务器(只读文件系统), 如果你想运行时编译css(不建议,但你可以这样做),确保你已经做了如下设置-

# inside config/application.rb
config.assets.enabled = true
config.assets.prefix = Rails.root.join('tmp/assets').to_s

# If you are using sass then keep gem outside of asset group
 gem 'sass-rails',   '3.1.4'

# inside config/environments/production.rb
config.assets.compile = true

下面是快速解决方法:

如果你正在使用capistrano,那么就这样把它添加到你的部署中。

after 'deploy:update_code' do
  run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
end

帽部署