我第一次尝试将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
答案 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网站再次开始工作。
谢谢!