【问题标题】:Replacing RAILS_ROOT with Rails.root用 Rails.root 替换 RAILS_ROOT
【发布时间】:2012-04-30 15:03:45
【问题描述】:

我想用 Rails.root 替换已弃用的 RAILS_ROOT,作为让应用程序准备好升级到 Rails 3 的过程的一部分。 该应用程序当前运行版本为 2.3.14,最初是在 1.2 中创建的

在我的 boot.rb 文件的开头是一行:

RAILS_ROOT = "#{File.dirname(FILE)}/.." 除非定义?(RAILS_ROOT)

我不能在这里只替换 Rails.root,因为 Rails 是未定义的。

设置 Rails.root 的推荐方式是什么?

我认为我的问题不够清楚。

  • 我知道 Rails.root 已经存在于 Rails 2 中。
  • 我可以很高兴地在我的代码中使用 Rails.root。
  • 但我不知道如何在启动时设置 Rails.root。我目前出现 设置在 boot.rb 的顶部,行:

    RAILS_ROOT = "#{File.dirname(FILE)}/.." 除非定义?(RAILS_ROOT)

  • 我不能只更改该行以使用 Rails.root,因为我会得到 错误:

    ../config/boot.rb:3: 未初始化的常量 Rails (NameError)

谢谢 乔治

【问题讨论】:

  • 你解决了这个问题吗?
  • 我想在升级到 Rails 3 之前,我只是在其中保留了带有 RAILS_ROOT 的代码。没有一个答案真正表明我该如何摆脱它。我可以在其他任何地方用 Rails.root 替换 RAILS_ROOT,但不能在 Boot.rb 中的那一行。
  • 有趣的是,我在 rails 3.2.14 中遇到了同样的问题。没找到解决办法
  • Rails 3.2 中的 boot.rb 更改。您应该使用不需要设置 RAILS_ROOT 的新 boot.rb。

标签: ruby-on-rails


【解决方案1】:

你可以这样使用

 Rails.root.join('lib/ca-bundle.crt')

试试看

【讨论】:

  • 感谢您的回复,但这也不能回答问题。我已经扩展了问题以使其更清楚。
  • 但它解决了我的问题,因为我正在从 rails 2.3.5 应用程序升级到 3.2.11。谢谢
【解决方案2】:

看起来Rails.root 确实存在于 Rails 2.3 中:http://apidock.com/rails/v2.3.2/Rails/root/class

在 2.3 中,它只返回 RAILS_ROOT,所以除非我弄错了,否则您可以在代码中使用 Rails.root 而无需进行其他修改。当您进行升级时,您的 boot.rb 将被替换,Rails 模块也将被替换,因此您的代码应该可以继续正常工作。

另外,如果您还没有使用它,我和我的同事发现这个插件在不久前从 2.3 升级到 3.0 时非常很有帮助:https://github.com/rails/rails_upgrade

【讨论】:

  • @giorgio 但是Rails.root 只是返回RAILS_ROOT,就像我说的那样。因此,如果您更改RAILS_ROOT 的值,您将更改Rails.root 的值。有什么不符合你想做的原因吗?
  • 我想我只是将 RAILS_ROOT 保持不变...我想当我升级到 Rails 3 时,无论如何都会重新生成 boot.rb 等。
  • 完全正确。不要期望手动设置核心方法。看看我链接的插件。它替换了所有需要替换的文件,还为您提供了大量关于代码的哪些部分需要更改的提示。另外,请在此处查看有关该主题的 Railscast:railscasts.com/episodes/225-upgrading-to-rails-3-part-1
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2011-12-02
  • 2013-10-23
  • 2013-09-20
  • 1970-01-01
  • 2012-02-15
  • 2011-04-07
相关资源
最近更新 更多