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 中工作