2012-03-05 3 views
1

Я использую the mixpanel gem для моего приложения. Он действует как промежуточное ПО и динамически вставляет код в голову для любого действия. Я хотел бы отключить его для определенных действий (например, у нас есть действие, которое отправляет электронное письмо, и мы не хотим, чтобы там был код). Любые идеи о том, как это сделать?Toggle Mixpanel Middleware Call in Ruby

Большое спасибо.

ответ

1

, кажется, что mixpanel есть updated их драгоценный камень

Предотвращение промежуточного слоя от вставки кода
Примечание: Применяется только при Rack Middleware является установка.
Иногда вам может потребоваться отправить запрос на HTML, который вы не хотите изменять промежуточному программному обеспечению. В запросе AJAX укажите заголовок «SKIP_MIXPANEL_MIDDLEWARE», чтобы предотвратить вставку кода панели микширования.

$.ajax("/path/to/api/endpoint", { 
    headers: {"Skip-Mixpanel-Middleware": true}, // valid http headers don't allow underscores and get filtered by some webservers 
    success: function(data) { 
     // Process data here 
    } }); 

    //Alternatively, you can add this line of code to your controller to temporarily disable the middleware: 

    Mixpanel::Middleware.skip_this_request 

Взято из: https://github.com/zevarito/mixpanel#prevent-middleware-from-inserting-code

+1

Удивительный, похоже, что это решило бы его. Я больше не работаю над этим проектом, поэтому я не могу проверить, но я буду считать ваши правильными, так как это реальное решение. Благодаря! –

0

От the Mixpanel docs:

В классе application_controller добавить метод экземпляра mixpanel.

before_filter :initialize_mixpanel 

def initialize_mixpanel 
    @mixpanel = Mixpanel::Tracker.new("YOUR_MIXPANEL_API_TOKEN", request.env, true) 
end 

Поскольку он инициализируется before_filter вы можете использовать skip_before_filter в других ваших контроллерах, ну, пропустите его для определенных действий, или для всех, кроме определенного действия, например:

class SomeController < ActionController::Base 
    skip_before_filter :initialize_mixpanel, :only => [ :create, :new ] 

    # or 

    skip_before_filter :initialize_mixpanel, :except => [ :update ] 

end 
+0

Это не похоже, чтобы сделать это. На самом деле это называется через промежуточное программное обеспечение, а не через before_filter. Пример: config.middleware.use «Mixpanel :: Tracker :: Middleware», «API_KEY» –

+0

О, извините. Документация была неясной (или, насколько это возможно, моя память о том, как работает промежуточное программное обеспечение, является нечеткой). Надеюсь, кто-то, кто знает больше, придет; иначе вы могли бы просто спросить разработчиков напрямую. [Это может быть полезно] (http://stackoverflow.com/questions/920719/how-do-i-use-a-rack-middleware-only-for-certain-paths) для вас (например, вы можете подклассы Mixpanel :: Tracker) или [это] (http://stackoverflow.com/questions/4598264/use-some-middleware-only-for-specific-rack-website) (аналогично). Удачи! –

+0

Спасибо за ссылки Иордан, я проверю их –

0

Мы не могли понять, как это сделать, и закончили тем, что избавились от него (используя gsub) после факта. Если у кого-то еще будет лучшее решение по дороге, я обязательно буду отмечать ваше право, я просто хочу закрыть вопрос. Благодаря