总结一下 :
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 中的 NameError 未初始化常量 MyActiveRecordModel::PgSearch
(通常,包含在 GemFile 中的这个 pg_search gem 应该在自动加载搜索路径中包含它的 lib/*.rb 文件和一个像 load "pg_search.rb", require"pg_search" 或"include PgSearch"的子句(包含的模块在 pg_search.rb 文件中)应该通过。
为了找到修复错误的线索,我有:
- 尝试是否可以包含 gem 提供的其他模块......它有效
在进入登台服务器的当前发布路径后,我运行“bundle exec rails c staging”并尝试:
看看 ActiveRecord 模型(我包括 PgSearch)实例化是否有效。
查看是否可以在服务器上找到/加载 gem 提供的模块并且我已执行 - 包括 PgSearch 并需要“pg_search”并加载“pg_search.rb”。
所有这些命令都是成功的。
我没有办法找到其他线索,请问您有什么建议吗?
谢谢你。