总结:
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通过登台服务器部署应用程序。
两者的rails environnment文件(environment / production.rb和amp / 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”这样的子句,需要“pg_search”或“包括PgSearch“(pg_search.rb文件中包含的模块)应该通过。
为了找到修复错误的线索,我有:
如果gem提供的其他模块可以包括在内......它可以正常工作
在访问登台服务器的当前版本路径后,我运行“bundle exec rails c staging”并尝试:
查看ActiveRecord模型(我包含的PgSearch)实例是否有效。
查看是否可以在服务器上找到/加载gem提供的模块 我已执行 - 包括PgSearch并要求“pg_search”并加载“pg_search.rb”。
所有这些命令都是成功的。
谢谢。
答案 0 :(得分:2)
Gems引入了rails需要访问的新代码。为了使新代码可用于Rails,我们将完成3个步骤:
重启rails服务器
很容易忘记一步。