我遇到了从旧的Rails 3.0项目升级到最新的Rails 3.2(Rails 4有点过于尖锐)并使用资产管道广告的麻烦。我已经成功地在像基础这样的宝石项目的新项目中使用了资产管道,但是让它在这个旧项目中工作似乎很难,反复出现Sprockets::FileNotFound
错误。 gemfile正确显示资产组中的所有gem。
source 'http://rubygems.org'
gem "rails", "~> 3.2.13"
... database gems ...
gem 'nokogiri'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'compass-rails'
gem 'uglifier', '>= 1.0.3'
gem 'zurb-foundation', '~> 4.0.0'
gem 'jquery-ui-rails'
end
gem 'jquery-rails'
....
请注意,我通过在Sprockets::FileNotFound: couldn't find file 'jquery'
- 组之外移动jquery-rails来解决类似的错误:assets
,但这不是至少基础应该如何工作...
我面临的另一个问题(可能是相关的)是rails g foundation:install
不起作用,即使bundle install
命令列出zurb-foundation
gem(4.0.9)是被使用。
我尝试将一个与基础资产一起使用的新生成的项目与我当前的项目进行比较,但我似乎查看了升级的Rails项目配置之间的区别,但Sprockets::FileNotFound: couldn't find file 'jquery'
基础仍然存在。
请注意,我已经看到了建议将文件移动到项目的vendor
- 文件夹中的解决方案,但这不是我所追求的解决方案类型。我想充分利用资产管道并尽可能保持项目的清洁。
有什么建议吗?
答案 0 :(得分:2)
我似乎自己找到了答案......猜问这个问题帮助我更好地发现新创建的项目与旧项目之间的差异......
在application.rb中,Bundler require语句与新创建的项目不同:
Bundler.require(:default, Rails.env) if defined?(Bundler)
(旧)与Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)
(新)
我认为差异需要除了默认组之外,当环境是开发或测试时,需要包含资产组。