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

Posted

技术标签:

【中文标题】Rails:不能包含 pg_search Gem 提供的 PgSearch 模块【英文标题】:Rails : Cannot include PgSearch Module provided by the pg_search Gem 【发布时间】:2013-07-27 09:34:38 【问题描述】:

总结:

Gem pg_search 提供的模块 PgSearch 无法在 staging 环境(Rbenv、nginx、unicorn、capistrano)中包含、必需或加载,该问题通过 http 发生在 web 服务器上,但未出现在 staging 服务器的 rails 上命令。 可以正确包含其他 gem 提供的其他模块。

在本地开发环境(rvm、puma)上没问题。

详情

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

暂存服务器环境:rbenv、nginx 和 unicorn 本地开发环境:rvm 和 puma

两者的 Rails 环境文件(environment/production.rb 和 environment/staging.rb)是相同的。

我做了什么:

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

我已经在开发模式下运行了应用程序......它可以工作!

问题:

将更改部署到登台服务器后: 通过http服务器我得到这个错误:

App::MyController#index 中的名称错误 未初始化的常量 MyActiveRecordModel::PgSearch

(通常,包含在 GemFile 中的这个 pg_search gem 应该在自动加载搜索路径中包含它的 lib/*.rb 文件和一个子句,如 load "pg_search.rb"、require"pg_search" 或 " include PgSearch"(pg_search.rb 文件中包含的模块)应该通过。

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

-尝试过是否可以包含 gem 提供的其他模块...它可以工作

在访问暂存服务器的当前发布路径后,我运行“bundle exec rails c staging”并尝试:

查看 ActiveRecord 模型(我包括 PgSearch)实例化是否有效。

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

所有这些命令都成功了。

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

谢谢。

【问题讨论】:

遇到类似问题 - 您找到解决方案了吗? 不,我已经切换到Sphinx和thinking_sphinx。 有类似的问题...重新启动服务器,一切开始工作。 重启服务器。它在本地对我有用。 【参考方案1】:

重启rails服务器

Gems 引入了 rails 需要访问的新代码。为了让 Rails 可以使用新代码,我们需要经过 3 个步骤:

    更改 Gemfile 捆绑安装

    重启rails服务器

    When do I need to restart the rails server?

很容易忘记一个步骤。

【讨论】:

谢谢!我已经对此进行了 30 分钟的故障排除,并且忘记重新启动我的 Rails 服务器。呃。非常感谢。

以上是关于Rails:不能包含 pg_search Gem 提供的 PgSearch 模块的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能用 gem install rails -v 4.0.0 安装 rails?

_destroy 不能在带有 Rails 4 的 Coocon gem 中工作

如何将 Rails 视图助手提取到 gem 中?

在 gem 中使用 rails 作为依赖项

具有资产的 Rails gem 不会添加到 config.assets.paths

如何将Rails的静态页面打包成ruby gem?