总结一下 :
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和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文件和加载“pg_search.rb”之类的子句,需要“pg_search”或“include PgSearch”(包括模块)在pg_search.rb文件中)应该通过.
为了找到修复bug的线索,我有:
如果由gem提供的其他模块可以被包括在内……它可以工作
在访问了临时服务器的当前版本路径之后,我运行“bundle exec rails c staging”并尝试:
>看看ActiveRecord模型(我包括PgSearch)的实例是否有效.
>查看是否可以在服务器上找到/加载gem提供的模块
我执行了 – 包括PgSearch并要求“pg_search”并加载“pg_search.rb”.
所有这些命令都是成功的.
我没有想法找到其他一些线索,请问您有什么建议吗?
谢谢.
最佳答案 重启rails服务器
Gems引入了rails需要访问的新代码.要使新代码可用于Rails,我们将执行3个步骤:
>更改Gemfile
>捆绑安装
>重启rails服务器
> When do I need to restart the rails server?
很容易忘记一步.