我有一个使用Bundler设置的Rails项目。我的一个捆绑的宝石提供了一个Rack中间件,我想在我的Rails应用程序中使用它(但仅限于'生产'Rails环境中)。
如果我在config/environments/production.rb
中输入这样的内容,我会得到一个未知的常量错误:
config.middleware.use ::Rack::MyMiddleware
...大概是因为此时尚未调用Bundler.require
,并且我的捆绑宝石都没有。
我找到了一些解决这个问题的方法,但似乎都没有,我想知道是否有一个我缺少的更标准的解决方案:
require 'my_middleware_gem'
config/environments/production.rb
config.middleware.use
调用包裹在after_initialize
块中,确保Bundler有机会在我尝试引用该常量之前执行此操作。"::Rack::MyMiddleware"
)代替裸类常量。由于某些原因,这似乎不适用于Unicorn,但它确实与其他一些服务器一起工作(使用Unicorn它最终会尝试调用"::Rack::MyMiddleware".new
,这当然会失败)。我错过了一些更好的方法吗?在初始化过程的什么时候,预计捆绑的宝石应该可用?
答案 0 :(得分:0)
从评论中复制答案,以便从“未答复”过滤器中删除此问题:
matt建议:
我认为在这种情况下使用
after_initialize
块是正确的方法。
grumbler确认:
是的,这就是我最终的目标。谢谢!关于原始问题中提到的独角兽问题,事实证明我遇到了这个问题:http://davidvollbracht.com/blog/headachenewunicorn-capistrano-bundler-usr2