1

我在将 Rail 应用程序部署到 Heroku 时遇到了困难。我真的很感激一个想法清单来解决这个问题,我已经用尽了我的想法正在诉诸于把我的头发拉出来!

短篇小说: heroku run rake db:migrate产生错误:

Running rake db:migrate attached to terminal... up, run.1
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
rake aborted!
syntax error on line 7, col 11: `'

这看起来应该很容易修复。问题是,我没有任何插件!

长话短说:我正准备重新部署 Rails 应用程序以进行登台。这是 Heroku 上的 Rails 3.0 应用程序,我刚刚完成了一次重大升级,包括升级到 Rails 3.2、Ruby 1.9.2、删除插件和重大重写。我现在正在尝试推送到 Heroku 的雪松堆栈以进行更多测试。

几天来,我一直在努力解决这个问题,并一直认为我正在取得进展,但随后感到失望。最近,我认为我的 git 存储库没有对齐,并且 Heroku 远程包含这些插件的旧提交。我不再认为是这种情况。(我确实想检查一下,但由于这个错误,我无法进入 Heroku 控制台来验证文件结构)。

确认一下,我的本地 master 和远程 github repo 上的 vendor/plugins 文件夹肯定是空的。它在远程 Heroku 分支上应该是空的,因为我已经推送了所有更新(我什至用新的远程名称创建了一个完全空白的应用程序来测试,但得到了同样的错误)。我说供应商/插件是空的,但实际上供应商/插件不存在,在我删除其中的插件后已被完全删除。

在早期版本中,我确实在应用程序中安装了两个插件:HABTM 复选框和 fancybox-rails。这些都已被卸载rails plugin remove <<plugin name>>

我检查了错误中引用的文件/app/rakefile:7,但看不出这行有什么问题MyApp::Application.load_tasks

如果我尝试启动 heroku 控制台,错误会略有不同,并且引用/app/config/environment.rb:5). 我这里也看不到任何东西MyApp::Application.initialize!

我已经通过所有可能的地方寻找这些插件或旧require语句的任何残余,但一无所获。

我真的很感激任何关于我可以在哪里看的想法。如果需要,我可以提供更多信息,我只是不确定现阶段有什么用处!!

谢谢你帮我留头发!!

编辑

我正在添加错误中提到的 rakefile 的全部内容。我看不出这有什么问题。

# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

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

MyApp::Application.load_tasks
4

3 回答 3

2

经过大量的拉扯和挫败后,我终于在日志中找到了以下条目

/usr/local/lib/ruby/1.9.1/syck.rb:135:in `load': syntax error on line 7, col 11: `' (ArgumentError)

syck.rb 解析 yaml 文件,我发现我有一个(小)问题,yaml 文件省略了一些特定于环境的信息。

有关更多详细信息,请参阅此 SO question

于 2012-04-29T03:50:55.743 回答
1

插件弃用警告来自 Heroku 在构建时注入到您的应用程序中的插件,因此它可以在平台上正常运行。这些可以忽略。

问题的症结似乎与源/rake 文件中的语法错误有关。这是重要的输出:

rake aborted!
syntax error on line 7, col 11: `'

查看错误源自文件的第 7 行(发布堆栈跟踪的其余部分以供我们参考?),您会发现某种需要修复的语法错误。

如果您想清楚地区分插件加载和应用加载时间,您可以使用它heroku run bash来加载 shell,然后运行 ​​rake 任务以查看其输出被隔离:

$ heroku run bash
> bundle exec rake db:migrate

希望有帮助。

于 2012-04-24T14:26:23.067 回答
0

我在某处读到 heroku 使用插件来自动化一些任务......所以这不是你的错

如果您想消除弃用警告,请使用以下小片段:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Initialize the rails application
ActiveSupport::Deprecation.silence do
  Selfcare::Application.initialize!
end
于 2012-04-24T09:16:09.473 回答