Rails 3 zabrało mi app.get

Chciałbym z poziomu kodu (tudzież w konsoli) wywołać konkretną akcję aplikacji. Za czasów Rails 2 robiło się to poprzez obiekt app – app.get i app.post wystarczały do wszystkiego.
Niestety w Rails 3 app jest nil. Co robić?

OK, disregard, jednak jest app i tym samym app.get – coś spaprałem :slight_smile:

OK, app jest, ale nie w rake taskach. Halp?

railsapp = Rails::Application.instance app = ActionDispatch::Integration::Session.new(railsapp)
Nie wiem komu z ekipy Rails 3 przeszkadzał obiekt app w rake taskach :confused:

Ja bym powiedział że ten obiekt jest tak brzydki że nie powinno go być, a na pewno nie powinien się nazywać “app” i siedzieć w globalnej przestrzeni nazw…

Pod spodem to prawdopodobnie wykorzystuje jakiś MockRequest. Moża to zrobić też na niższym poziomie:

require 'rack/test' env = Rack::MockRequest.env_for("/") response = Rails.application.call(env) response[2].body
Tutaj oczywiście lepiej wykorzystać Integration::Session, jakkolwiek brzydka ta klasa nie jest, ale pokazuję jakby ktoś się zastanawiał jak można to inaczej zrobić.