捆绑安装后Rails 3 Gemfile Gems未加载

Posted

技术标签:

【中文标题】捆绑安装后Rails 3 Gemfile Gems未加载【英文标题】:Rails 3 Gemfile Gems not Loading After Bundle Install 【发布时间】:2013-05-12 03:30:09 【问题描述】:

我正在使用 Ruby v2.0.0 在 Rails 3 中编写一个应用程序。

我在 app/helpers/posts_helper.rb 中有一个助手:

module PostsHelper
  def markdown(text)
    @redcarpet = Redcarpet::Markdown.new(Redcarpet::Render::html, fenced_code_blocks: true) unless @redcarpet
    @redcarpet.render text
  end
end

我的Gemfile 包含gem 'redcarpet', '~> 2.2',我已经成功运行bundle install。但是,每当我尝试加载使用此帮助程序的页面时,我都会收到此错误:

uninitialized constant PostsHelper::Redcarpet

我该怎么做才能让它工作?我对这个问题感到困惑。

编辑:

我还在 rails console 中测试过 Redcarpet:

$ bundle exec rails console
Loading development environment (Rails 3.2.13)
irb(main):001:0> Redcarpet::Markdown.new(Redcarpet::Render::HTML).render('text *markdownified*')
=> "<p>text <em>markdownified</em></p>\n"

所以它可以在控制台中工作,而不是在我的助手(或控制器,我也尝试过)中。

【问题讨论】:

【参考方案1】:

Ruby 正在尝试在 PostsHelper 命名空间中查找 Redcarpet。使用 ::Redcarpet 将其提升到全局命名空间

【讨论】:

我已将两个引用从 Redcarpet 更改为 ::Redcarpet,现在我得到了这个:uninitialized constant Redcarpet 如果您在 Rails 控制台中执行 @redcarpet = ... 语句会发生什么?它对我有用。 1) 安装 redcarpet 后是否重启了 rails 服务器? 2)在没有实例变量的情况下尝试它,没有@。 3) 向助手添加要求,不应该需要吗? 我不敢相信。我没有重新启动服务器。哇。感谢您的精彩常识

以上是关于捆绑安装后Rails 3 Gemfile Gems未加载的主要内容,如果未能解决你的问题,请参考以下文章

使用 Elastic Beanstalk 在 Amazon AWS 上为非 Rails ruby​​ 脚本安装 Gems

Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)

为什么gem`therubyracer`默认在Gemfile中注释掉了?

捆绑安装不适用于 capistrano

您的捆绑包被锁定为 mimemagic (0.3.5),但在您的 Gemfile 中列出的任何源中都找不到该版本 [重复]

是否为 rails 应用程序在 Gemfile 中强制指定 Gem 版本