Ruby on rails 3 迁移到Rails 3.1.3后,生产中无法访问所有映像

Ruby on rails 3 迁移到Rails 3.1.3后,生产中无法访问所有映像,ruby-on-rails-3,routes,asset-pipeline,Ruby On Rails 3,Routes,Asset Pipeline,从3.0.3升级到rails 3.1.3后,在production env上无法访问所有我的映像。即使我手动转到http://localhost:3000/rails.png并将图像文件置于public/我发现路由错误。当访问localhost:3000/images/rails.png时,如果我将其移动到public/images,情况也是一样 我不确定这是配置错误的资产设置。我尝试在堆栈溢出中跟踪类似的线程,但没有成功。这是我的文件和配置文件 档案 source 'http://rubyge

从3.0.3升级到rails 3.1.3后,在production env上无法访问所有我的映像。即使我手动转到
http://localhost:3000/rails.png
并将图像文件置于
public/
我发现路由错误。当访问
localhost:3000/images/rails.png
时,如果我将其移动到
public/images
,情况也是一样

我不确定这是配置错误的资产设置。我尝试在堆栈溢出中跟踪类似的线程,但没有成功。这是我的文件和配置文件

档案

source 'http://rubygems.org'
gem "rails", "3.1.3"
gem "pg", :require => "pg"
gem "devise", "~> 1.5.2"
gem "cancan"
gem "hoptoad_notifier", '2.4.11'
gem "friendly_id", "~> 3.1"
gem "will_paginate", "~> 3.0.2"
gem "haml", "~> 3.1.3"
gem "haml-rails"
gem "yard"
gem "bluecloth"
gem "simple_form", '~> 1.3.1'
gem "paperclip"
gem "jquery-rails"
gem 'twitter-bootstrap-rails'
gem 'thin'

group :assets do
  gem 'sass-rails', " ~> 3.1.5"
  gem 'coffee-rails', " ~> 3.1.0"
  gem 'uglifier'
end

group :development, :test do
  gem "rspec-rails", "~> 2.7.0"
  # gem 'remarkable_activerecord', '~> 4.0.0.alpha4'
  gem "maksar-remarkable_activerecord", "~> 4.0.0.alpha6"
  gem "faker"
  gem "evergreen", :require => "evergreen/rails"
  gem 'pry'
end

group :development do
  gem "rails3-generators"
  gem "hpricot"
  gem "ruby_parser"
end

group :test, :cucumber do
  gem "factory_girl_rails"
  gem "database_cleaner"
  gem "timecop"
  gem "pickle"
  gem "spork", "~> 0.9.0.rc2"
end


group :cucumber do
  gem "cucumber"
  gem "cucumber-rails"
  gem "capybara", "~> 0.4.0"
  gem "launchy"
end

group :test do
  gem "mocha"
  gem "autotest"
  gem "autotest-rails"
end
application.rb

module MyTutorial
  class Application < Rails::Application
    # ... other config...
    # 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'
    config.assets.initialize_on_precompile = false
  end
end

您可能会遇到路由错误,因为启用管道时,假定所有资产都在管道中。您将在找不到所需资源的地方使用图像标记帮助程序

使用您的设置(compile=true),所有资产请求都会传递到链轮

默认情况下,所有资产都显示在路径
/assets
中。您还应更改这两行:

config.assets.compile = true config.assets.digest = false config.assets.compile=true config.assets.digest=false 为此:

config.assets.compile = false config.assets.digest = true config.assets.compile=false config.assets.digest=true 并在测试之前运行预编译任务

您还应该删除
x\u sendfile\u标题
选项。生产服务器需要专门设置才能使用此功能,而某些服务器不支持此功能(为您提供空白图像)

您可以对照《资产管道指南》的中显示的设置检查设置


修复上述设置后,请删除
tmp/cache/assets/
中的链轮缓存,然后重新启动服务器。

您可能会遇到路由错误,因为启用管道时,假定所有资产都在管道中。您将在找不到所需资源的地方使用图像标记帮助程序

使用您的设置(compile=true),所有资产请求都会传递到链轮

默认情况下,所有资产都显示在路径
/assets
中。您还应更改这两行:

config.assets.compile = true config.assets.digest = false config.assets.compile=true config.assets.digest=false 为此:

config.assets.compile = false config.assets.digest = true config.assets.compile=false config.assets.digest=true 并在测试之前运行预编译任务

您还应该删除
x\u sendfile\u标题
选项。生产服务器需要专门设置才能使用此功能,而某些服务器不支持此功能(为您提供空白图像)

您可以对照《资产管道指南》的中显示的设置检查设置


修复上述设置后,请删除
tmp/cache/assets/
中的链轮缓存,然后重新启动服务器。

打开到
production.rb
,然后

config.serve_static_assets = true

打开您的
production.rb
,然后

config.serve_static_assets = true

编译和摘要选项并不重要。最后我删除了这一行
config.action\u dispatch.x\u sendfile\u header=“x-sendfile”
感谢您的全面回答!编译和摘要选项并不重要。最后我删除了这一行
config.action\u dispatch.x\u sendfile\u header=“x-sendfile”
感谢您的全面回答!