heroku rake db:migrate>没有这样的文件加载 - faker

时间:2011-02-16 07:51:34

标签: ruby-on-rails-3 heroku

我第一次尝试将rails 3应用程序部署到heroku。它似乎推高了,但是当我尝试运行时

heroku rake db:migrate

我收到以下错误:

rake aborted!
no such file to load -- faker
/app/98c71cc3-375f-4397-9de3-034dd7268be3/home/Rakefile:7
(See full trace by running task with --trace)
(in /app/98c71cc3-375f-4397-9de3-034dd7268be3/home)

这是我的rakefile(第7行是最后一个):

require File.expand_path('../config/application', __FILE__)
require 'rake'

SampleApp::Application.load_tasks

现在我有一个名为sample_data.rake的任务,它使用faker gem用开头数据填充开发数据库,​​该任务包含以下行:

require 'faker'

在顶部,这必然是造成问题的原因。

如何修复此错误或者是否有办法让heroku忽略此任务文件?无论如何,我不打算用无意义的样本数据来填充生产版本。

顺便说一句,faker只在我的gemsfile中的开发环境中处于活动状态:

# gemfiles for the rspec testing environment
group :development do
  gem 'rspec-rails', '2.5.0'
  gem 'annotate-models', '1.0.4'
  gem 'faker', '0.3.1'
end

3 个答案:

答案 0 :(得分:21)

将require语句移动到任务中。 例如

# sample_data.rake
require 'faker'

task :sample_data => :environment do
 # ...
end

# sample_data.rake
task :sample_data => :environment do
  require 'faker'

 # ...
end

这样,只有在调用任务时才需要库。

另一种选择是在你的rake文件中不要求Faker。 实际上,当在开发中执行bundle时,Bundler已经加载了它。

如果您不希望Bundler加载Gem,请使用

gem 'faker', '0.3.1', :require => false

答案 1 :(得分:1)

对我来说,Simone的第一种方法不起作用,但第二种方法没有用:require 'faker'可以从rake文件中删除。

答案 2 :(得分:1)

我也注释掉lib / tasks / sample_data.rake文件中的'faker'并且(通过git提交此更改后)将文件推送到heroku,这允许 $heroku rake db:migrate --app <my app name>成功执行,并且heorku网站再次开始工作。

谢谢!