更新:
事实证明,有时 results.image 为 nil 或“”,所以这破坏了应用程序,因为资产管道正在寻找像“”这样的图像而没有找到它。现在,如果没有图像,我不会显示图像,但我必须为丢失的图像添加默认图像......这应该是一个更永久的修复。
关于heroku cedar和Rails资产管道的这个问题,我有很多SO问题,我尝试了很多解决方案,但没有一个有效,这可能是因为我遇到的问题有一个皱纹我在其他任何地方都没有见过。
我的应用程序使用 Rails 3.2.6,我已经将它部署在 Heroku 的 cedar 堆栈上。这是一个基本的搜索应用程序,它通过 websolr 搜索附加的 postgres db,所以当你加载没有 params[:q].present 的索引 (index#index) 时?你会得到一个搜索框,这很好用。但是当我在搜索框中放一些东西并点击提交时,index#index 再次加载但这次尝试显示结果,我得到:
app[web.1]: Completed 500 Internal Server Error in 440ms
app[web.1]:
app[web.1]: ActionView::Template::Error ( isn't precompiled):
app[web.1]: 12: - @results.each do |result|
app[web.1]: 13: %li
app[web.1]: 14: %div
app[web.1]: 15: = image_tag result.image
app[web.1]: 16: %div
app[web.1]: 17: = result.title
app[web.1]: 18: %div
app[web.1]: app/views/index/index.html.haml:15:in `block in _app_views_index_index_html_haml___4350601325072829986_32734540'
app[web.1]: app/views/index/index.html.haml:12:in _app_views_index_index_html_haml___4350601325072829986_32734540'
我的特殊案例与我见过的其他案例的奇怪之处在于以下几行:
ActionView::Template::Error ( isn't precompiled):
对于我见过的所有其他类似问题,括号中有一个css文件,即(“foo.css”未预编译),或者在我的情况下它似乎应该是(“index.css”没有预编译)。但这里只是空白!
这是我正在尝试开始工作的暂存部署,因此我尝试运行 RAILS_ENV=staging rake assets:precompile (当然,然后提交结果),但这并不能解决问题。我什至尝试去掉视图中的(注意那里没有任何实际样式)。没有任何效果,我很茫然。任何帮助将不胜感激。
作为参考,这是我的 gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'pg'
gem 'haml-rails'
gem 'mongoid'
gem 'sunspot_rails', '~> 1.3.0'
gem 'sunspot_solr'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
group :development do
gem 'heroku_san'
gem 'annotate'
gem 'awesome_print'
end
group :development, :test do
gem 'rspec-rails'
end
group :test do
gem 'cucumber-rails', :require => false
gem 'capybara'
gem 'database_cleaner'
gem 'spork'
gem 'launchy'
end
group :staging, :production do
gem 'thin'
end
以下是我的 config/application.rb 文件中的配置选项:
config.encoding = "utf-8"
config.filter_parameters += [:password]
config.active_support.escape_html_entities_in_json = true
config.active_record.whitelist_attributes = true
config.assets.enabled = true
config.assets.version = '1.0'
config.assets.compile = true
这是我的环境/staging.rb 文件中的配置选项:
config.cache_classes = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.serve_static_assets = false
config.assets.compress = true
config.assets.compile = true
config.assets.precompile += ['index.css.scss']
config.assets.digest = true
config.i18n.fallbacks = true
config.active_support.deprecation = :notify