Algumas diferenças entre desenvolvimento e produção em Rails

Desenvolvedores experientes de ROR sabem sobre as diferenças entre desenvolvimento e produção. Descrevi alguns deles aqui, que não conhecia antes:

#config/routes.rb
resources
:pages do
get
":slug" => "pages#show"
end

#app/controllers/pages_controller.rb
def show
@page = Page.find_by_slug params[:slug]
end

Em desenvolvimento, esta construção de rotas fornecerá parâmetros:

{"controller"=>"web/pages", "action"=>"show", "slug"=>"slug"}

Mas na produção vai te dar:

{"controller"=>"web/pages", "action"=>"show", "id"=>"slug"}

O valor “slug” tem a chave “id”, não “slug”. Como resultado, o mesmo código nos dá resultados diferentes em ambientes diferentes. Para resolver este problema, você precisa escrever:

resources :pages do
collection
do
get
":slug" => "pages#show"
end
end

O próximo exemplo é sobre decoradores. Se você usar joia draper em seu projeto. Você precisa do decorador no controlador: Admin :: UsersController

class Admin::UsersController < Admin::ApplicationController
def index
@users = UserDecorator.decorate_collection User.all
end
end

No Rails 3.2.17 em desenvolvimento o UserDecorator é o Admin :: UserDecorator , porque você usa no controlador Admin. Está bem. Você adiciona funções a Admin :: UserDecorator sem remorso.

Mas na produção o UserDecorator é o UserDecorator (!!!), então na produção você tem o método de erro indefinido alguma função em UserDecorator .

Se você deseja usar a classe UserDecorator sem Admin :: UserDecorator, você deve escrever :: UserDecorator no controlador Admin. Será UserDecorator em desenvolvimento e produção.

class Admin::UsersController < Admin::ApplicationController
def index
@users = ::UserDecorator.decorate_collection User.all
end
end

Lembre-se das diferenças entre os ambientes.