无法检测rake任务

时间:2013-12-06 11:22:17

标签: heroku

   ensure you can run `$ bundle exec rake -P` against your app with no environment variables present
   and using the production group of your Gemfile.
   This may be intentional, if you expected rake tasks to be run
   cancel the build (CTRL+C) and fix the error then commit the fix:
   rake aborted!

我没有任何我想自动运行的rake任务。我应该忽略这个警告吗?

5 个答案:

答案 0 :(得分:4)

我昨天突然开始犯这个奇怪的错误。 Heroku确认在Ruby buildpack中创建update ...

它与Rakefile有关。你的Rakefile是否需要任何文件?它需要你的app文件吗?如果是这样,那么应用程序在没有设置任何配置变量的情况下加载时不应引发异常。

这是违反直觉的,因为应用程序永远不会在没有设置配置变量的情况下运行。

就我而言,Sinatra应用程序正在init文件中查找数据库URL:

uri = URI.parse( ENV[ "REDISTOGO_URL" ])

如果没有设置env vars,这将引发异常。

您可能会遇到与其他数据库网址相同的问题,例如Mongo或Postgres。

所以,要防止缺少环境变量:

if  ENV[ "REDISTOGO_URL" ]
  uri = URI.parse( ENV[ "REDISTOGO_URL" ])
  ...

您可以在运行bundle exec rake -P

推送到Heroku之前检查它是否有效

此外,确保在更新init后通过所有测试。通过重新启动Spork或类似的方法删除任何缓存的init状态。

参考:Show Rakefile errors in Ruby deploys

答案 1 :(得分:4)

自2013年12月5日起生效Heroku added debug output to deploys using the Ruby build pack

触发错误:

  • 如果assets:precompile任务不存在或
  • 如果Rakefile中存在错误。
    • Rakefile中的两个常见错误原因是引用了生产中不可用的依赖项(例如rspec)或
    • 期望存在环境变量。

这是违反直觉的,因为应用程序永远不会在没有配置变量的情况下运行,但Heroku's build process executes without config vars

根据错误消息,确保在推送到Heroku之前可以运行bundle exec rake -P RAILS_ENV=production 而不存在环境变量(例如,在运行上述命令时注释掉环境变量)。

另外,请放心,rake的{​​{1}}切换是无害的,因此您可以根据需要运行它,直到您解决此问题为止。此开关用于显示所有任务及其直接先决条件的列表。如果要仔细检查,请参阅Rake Command Line Usage。输出可能超过-P行,看起来像这样:

200

答案 2 :(得分:1)

您也可以尝试启用user-env-compile

heroku labs:enable user-env-compile

答案 3 :(得分:1)

FWIW我也遇到了这个问题。

事实证明,当config.assets.css_compressor = :sass中有一个rake任务引用它时,我已production.rb注释掉了。

非常简单的疏忽,但这会导致rake assets:precompile失败,从而导致此错误。

答案 4 :(得分:1)

一个老问题,但是我刚才遇到了这个问题,并且有一个新的修复方法。如果您使用的是Ruby版本<= 2.6.1和Bundler 2.0.1,请将Ruby更新为2.6.3($ rvm install "ruby-2.6.3"),并将Bundler更新为2.0.2($ gem install bundler '2.0.2')。确保在您的Gemfile中指定新的Ruby版本。

不幸的是,我无法告诉您为什么这样做,但是到目前为止,它已经为我团队中的其他3个人使用,因此值得一试。