2011-02-16 106 views
16

我想部署一个rails 3应用程序到heroku第一次。这似乎推OK,但是当我尝试运行heroku rake db:migrate>没有这样的文件加载 - faker

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忽略这个任务文件?无论如何,我不打算用无意义的样本数据填充生产版本。

顺便说一句,骗子只是在我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 

回答

21

移动的要求语句转换成任务。 例如

# 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在开发中执行时已经装载。

如果你不想捆扎机加载宝石,使用

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

第一个解决方案对我不起作用,但添加`:require => false`确实 – 2012-07-17 04:00:46

1

对我来说,Simone的第一种方法没有工作,但第二个做的:require 'faker'可以从耙文件被删除。

1

我也注释掉需要“骗子”的lib /任务/ sample_data.rake文件(提交通过的git这种变化后)推文件的Heroku,这让 $heroku rake db:migrate --app <my app name>成功执行,并ERGO的heorku网站再次开始工作。

谢谢!

相关问题