为什么这个rails gem不会在独角兽的生产中加载?

时间:2014-07-11 22:23:03

标签: ruby-on-rails gem require unicorn

我在Ruby on Rails应用程序中使用humanize_boolean gem。

宝石对我很有用,除了一个重要的地方,那是我的制作网络服务器。我不会因为我的问题而责怪这个宝石,但我会喜欢别人眼球所能提供的任何帮助。

在视图模板中,我使用了humanize。但是我得到了

ActionView::Template::Error (undefined method `humanize' for true:TrueClass):

事实上,还没有包含humanize_boolean gem。我可以告诉我何时使用$LOADED_FEATUREShumanize_boolean.rb不在列表中,但它正在开发中。

以下说服我说它应该有效:

  • 当我使用像RAILS_ENV=production rails c这样的生产控制台时,它可以正常工作。例如。 true.humanize按预期打印“是”。
  • 在我的Gemfile中,我的gem'manualize_boolean'不在任何组中。因此,它应该在生产中使用。
  • 它适用于Sidekiq在制作中发送的电子邮件的电子邮件模板。

我正在使用独角兽作为应用服务器。

如果我手动要求控制器中的文件,它可以正常工作。 E.g。

require '/home/ubuntu/app/shared/bundle/ruby/2.0.0/gems/humanize_boolean-0.0.1/lib/humanize_boolean/version.rb'
require '/home/ubuntu/app/shared/bundle/ruby/2.0.0/gems/humanize_boolean-0.0.1/lib/humanize_boolean.rb'

class ClientsController < ApplicationController
...

此外,如果我在生产中使用webrick,它也可以使用,例如

$ RAILS_ENV=production rails s

所以不知怎的,这是独角兽的问题,但我没有其他这样的问题。奇异。

2 个答案:

答案 0 :(得分:1)

尝试将此添加到您的unicorn.rb文件中:

before_exec do |server| 
  ENV["BUNDLE_GEMFILE"] = "/path/to/app/current/Gemfile" 
end

这应该确保在unicorn启动之前加载gemfile。

答案 1 :(得分:0)

这并没有具体回答你的问题,但我建议你跳过宝石并使用帮手:

def human_boolean(boolean)
  boolean ? "Yes" : "No"
end

human_boolean(true)
# => "Yes"

human_boolean(false)
# => "No"

我只是建议这样做,因为宝石被如此简单的代码所压制。