2013-03-21 137 views
1

我在从较老的Rails 3.0项目升级到最新的Rails 3.2(Rails 4有点太锋利)并且使用资产管道广告。我已经成功地在像基金会这样的宝石的新项目中使用了资产管道,但让它在这个较旧的项目中工作似乎很困难,重复获取Sprockets::FileNotFound错误。 gemfile正确地显示资产组中的所有宝石。找不到文件'jquery',找不到'foundation'

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' 
.... 

注意,我通过移动:assets -group外jQuery的轨道来解决类似的错误Sprockets::FileNotFound: couldn't find file 'jquery',但是这不是应该的基础如何,至少工作...

还有一个问题,我面对(并且可能是相关的)是rails g foundation:install不起作用,即使bundle install命令列出了正在使用的zurb-foundation gem(4.0.9)。

我试过比较一个刚刚生成的项目和我的当前项目一起使用基础资产,但我似乎查看了升级后的Rails项目配置的差异,但Sprockets::FileNotFound: couldn't find file 'jquery'基础仍然存在。

请注意,我已经看到了解决方案,建议将文件移动到您项目的vendor-文件夹中,但这不是我所追求的解决方案类型。我想充分利用资产管道,并尽可能保持项目清洁。

有什么建议吗?

+1

您是否尝试将其他宝石(粉底,jqueryui)移出资产组? – mraaroncruz 2013-03-21 13:07:25

回答

2

我似乎找到了自己的答案...猜问这个问题让我察觉新建项目和旧项目更好地之间的差异...

在application.rb中所述捆绑需要声明不同从新建项目:

Bundler.require(:default, Rails.env) if defined?(Bundler)(旧)与Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)(新)

我猜的差别需要,除了默认组的资产组需要在环境或者是开发或测试被包括在内。