Rails:不能包含pg_search Gem提供的PgSearch模块

时间:2013-07-26 23:57:58

标签: ruby-on-rails ruby activerecord module pg-search

总结:

Gem pg_search提供的模块PgSearch无法在登台环境(Rbenv,nginx,unicorn,capistrano)中包含,加载或加载,问题在Web服务器上通过http发生,但不会出现在登台服务器的rails上命令。 可以包含其他gem提供的其他模块而不会出错。

本地开发环境没有问题(rvm,puma)。

详情

我目前正在使用ruby 2.0.0开发Ruby On Rails 4.0应用程序,git存储库托管在bitbucket上。 我使用capistrano通过登台服务器部署应用程序。

  • 登台服务器环境:rbenv,nginx和unicorn
  • 本地开发环境:rvm和puma

两者的rails environnment文件(environment / production.rb和amp / environment / staging.rb)是相同的。

我做了什么:

我已经安装了pg_search gem(一个PostgreSQL全文搜索gem),将它添加到我的Gemfile中并将“include PgSearch”子句放在我想用于pg_search gem的Active Record模型中

我已经在开发模式下运行了应用程序......它有效!

问题:

将更改部署到登台服务器后: 通过http服务器我收到此错误:

App :: MyController #index中的NameError 未初始化的常量MyActiveRecordModel :: PgSearch

(通常,包含在GemFile中的这个pg_search gem应该包含自动加载搜索路径中包含的lib / * .rb文件以及像load“pg_search.rb”这样的子句,需要“pg_search”或“包括PgSearch“(pg_search.rb文件中包含的模块)应该通过。

为了找到修复错误的线索,我有:

如果gem提供的其他模块可以包括在内......它可以正常工作

在访问登台服务器的当前版本路径后,我运行“bundle exec rails c staging”并尝试:

  • 查看ActiveRecord模型(我包含的PgSearch)实例是否有效。

  • 查看是否可以在服务器上找到/加载gem提供的模块 我已执行 - 包括PgSearch并要求“pg_search”并加载“pg_search.rb”。

所有这些命令都是成功的。

我没有想法找到其他一些线索,请问您有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

重新启动rails服务器

Gems引入了rails需要访问的新代码。为了使新代码可用于Rails,我们将完成3个步骤:

  1. 更改Gemfile
  2. 捆绑安装
  3. 重启rails服务器

  4. 很容易忘记一步。