1

我在从旧的 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-group 之外解决了类似的错误,但这不是至少基础应该如何工作......

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

我尝试将使用基础资产的新生成项目与我当前的项目进行比较,但我似乎查看了升级后的 Rails 项目配置之间的差异,但Sprockets::FileNotFound: couldn't find file 'jquery'基础仍然存在。

请注意,我已经看到建议将文件移动到项目的文件vendor夹中的解决方案,但这不是我想要的解决方案类型。我想充分利用资产管道,并尽量让我的项目保持干净。

有什么建议么?

4

1 回答 1

2

我似乎自己找到了答案……猜猜问这个问题有助于我更好地发现新创建的项目和旧项目之间的差异……

在 application.rb 中,Bundler 的 require 语句与新创建的项目不同:

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

我想区别在于除了默认组之外,当环境是开发或测试时,还需要包含资产组。

于 2013-03-21T13:08:08.577 回答