heroku运行rake>没有这样的文件加载 - faker

Cor*_*son 5 ruby-on-rails heroku

运行'heroku run rake'时出现此错误:

  no such file to load -- faker
/app/lib/tasks/sample_data.rake:1:in `require'
/app/lib/tasks/sample_data.rake:1:in `<top (required)>'
Run Code Online (Sandbox Code Playgroud)

我有一个gem'faker','0.3.1'在group:development下,:test在Gemfile中.

我在sample_data.rake中要求'faker'

source 'https://rubygems.org'

gem 'rails', '3.2.11'
gem 'gravatar_image_tag', '0.1.0'

group :development, :test do
  gem 'sqlite3', '1.3.5'
  gem 'rspec-rails', '2.8'
 gem 'guard-spork', '1.2.0'
 gem 'faker', '0.3.1'
  gem 'spork', '0.8.4'
  gem 'will_paginate', '3.0'
gem 'webrat', '0.7.1'
 gem 'capybara', '1.1.2'
gem 'annotate', '2.5.0'
gem 'factory_girl_rails', '1.0'
end

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '3.2.5'
  gem 'coffee-rails', '3.2.2'
  gem 'uglifier', '1.2.3'
end

gem 'jquery-rails', '2.0.2'

group :production do
  gem 'pg', '0.12.2'
end
Run Code Online (Sandbox Code Playgroud)

gab*_*lal 10

Heroku 默认不安装testdevelopment宝石.

如果要fake在生产中加载,则应将其gem 'faker', '0.3.1'从中删除group :development, :test do并将其放在任何组外:

  source 'https://rubygems.org'
  gem 'rails', '3.2.11'
  gem 'gravatar_image_tag', '0.1.0'
  gem 'faker', '0.3.1'

  group :development, :test do
  gem 'sqlite3', '1.3.5'
  ...
Run Code Online (Sandbox Code Playgroud)

但是,如果您不想加载fake,则必须确保require fake仅在调用任务时才需要加载:

task :sample_data => :environment do
  require 'faker'  #must be inside the task.
  ...
end
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

编辑

您可以通过以下方式告诉Bundler不加载Gem:

 gem 'faker', '0.3.1', :require => false
Run Code Online (Sandbox Code Playgroud)