5

总结一下 :

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”。

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

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

谢谢你。

4

1 回答 1

2

重启 Rails 服务器

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

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

很容易忘记一步。

于 2016-10-28T11:59:45.513 回答