shahryarjb

shahryarjb

I have read phoenix documents and edited my code but it didn’t work for me.

my dev config :

config :trangell_html_site_web, TrangellHtmlSiteWeb.Endpoint,
  http: [port: 9991],
  debug_errors: false,
  code_reloader: true,
  check_origin: false,
  watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
                    cd: Path.expand("../assets", __DIR__)]]

my ErrorView :

  def render("404.html", _assigns) do
   "Page not found"
  end

  def render("500.html", _assigns) do
    "Server internal error"
  end

  def template_not_found(template, _assigns) do
    Phoenix.Controller.status_message_from_template(template)
  end

but it shows me :

How can I fix this ?

ref

https://hexdocs.pm/phoenix/errors.html
https://hexdocs.pm/phoenix/views.html#the-errorview

phoenix 1.3 || elixir v1.6.4

Showing Posts 13 to 4

sekrett

sekrett

On Elixir 1.7.4 I got this exact problem in umbrella project and fixed it by deleting _build folder. When I change debug_error flag and I restart the server I don’t see any file recompiled.

shahryarjb

shahryarjb OP

I added use TrangellHtmlSiteWeb, :controller in MyErrorView like this:

defmodule TrangellHtmlSiteWeb.ErrorView do
  use TrangellHtmlSiteWeb, :view
  use TrangellHtmlSiteWeb, :controller

Do I make a mistake? is this wrong or not? because I am able to get the session in my 404.html.eex now.


Update

it didn’t fix :sweat::frowning_face:, I think this problem won’t be fixed because 404 page is not a router

LostKobrakai

LostKobrakai

If you want to do work in a render/2 call but still render a template in the end you can use render_template/2, which you can see in practice here: Phoenix.Template – Phoenix v1.3.4

shahryarjb

shahryarjb OP

somebody knows what my problem is?
I was forced to use redirect(conn, to: "/404")

path: controllers/blog_fallback_controller.ex

def call(conn, {:ok, %HTTPoison.Response{status_code: 404, body: _body}}) do
      conn
      |> put_flash(:info, "متاسفانه صفحه ای که به دنبال آن هستید وجود ندارد.")
      |> redirect( to: "/404")
 end

and

<!-- /web/templates/error/404.html.eex -->
  <body>
      <%= if Phoenix.Controller.get_flash(@conn, :info) do %>
    <div class="clearfix"> </div>
    <div class="speacer40"></div>
      <div class="alert alert-warning alert-dismissible fade show container rtl-m" role="alert">
        <%= Phoenix.Controller.get_flash(@conn, :info) %>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
    <% end %>
    <h1>403 - Page Not Found</h1>
    <p>This isn't the page you were looking for.</p>
  </body>

get_flash doesn’t work and I can’t use session, what do I do ?

** (exit) an exception was raised:
    ** (ArgumentError) flash not fetched, call fetch_flash/2
        (phoenix) lib/phoenix/controller.ex:1236: Phoenix.Controller.get_flash/1
        (phoenix) lib/phoenix/controller.ex:1250: Phoenix.Controller.get_flash/2
shahryarjb

shahryarjb OP

Hmm, Im confused, honestly I need it to show my 404.html.eex instead of text, I have created 2 html .eex before, but I can’t use these.

for example:

<!-- /web/templates/error/404.html.eex -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>404 - Page Not Found</title>
    <link rel="stylesheet" href="<%= static_path(@conn, "/css/app.css") %>">
  </head>

  <body>
    <h1>404 - Page Not Found</h1>
    <p>This isn't the page you were looking for.</p>
  </body>
</html>

that is my web/templates/error/404.html.eex , but It isn’t shown when I enter broken url. it shows me a text but I want that.


Updated:

now I know, I have to delete all of my codes in My ErrorView except the following line:

def template_not_found(template, _assigns) do
    Phoenix.Controller.status_message_from_template(template)
end

I have 2 questions

q1: when I have 401 or 403 status; What is happens? can I custom them ?
q2: I have a FallbackController please see my code:

defmodule TrangellHtmlSiteWeb.BlogFallbackController do
  use Phoenix.Controller

    def call(conn, {:ok, %HTTPoison.Response{status_code: 404, body: _body}}) do
      conn
      |> put_flash(:info, "متاسفانه صفحه ای که به دنبال آن هستید وجود ندارد.")
      |> render(TrangellHtmlSiteWeb.ErrorView , :"404")
    end
end

I render render(TrangellHtmlSiteWeb.ErrorView , :"404") and it shows me an error in centre of my template, but in the main page if I try like: local.com/404 it just shows me full 404 error page, independently!!

Please see:

pic 1:

pic2:

how can I redirect it to 404full page with the session which I need?

NobbZ

NobbZ

What is it you actually want? If you want some HTML template rendered, then do so. As far as I remember you simply need to provide the template in the template/error folder and then leave off the render clause.

shahryarjb

shahryarjb OP

Then what do I do to fix this? would you mind telling me? Please

NobbZ

NobbZ

This produces an infinite loop.

shahryarjb

shahryarjb OP

@josevalim
Unfortunately, I have a problem with this part, I want to redirect to html error page but I can’t

defmodule TrangellHtmlSiteWeb.ErrorView do
  use TrangellHtmlSiteWeb, :view

  # If you want to customize a particular status code
  # for a certain format, you may uncomment below.
  def render("404.html", _assigns) do
  "Page not found"
  end

  def render("500.html", _assigns) do
    "Server internal error"
  end

  # In case no render clause matches or no
  # template is found, let's render it as 500
  def template_not_found(_template, assigns) do
    render "500.html", assigns
  end

  def template_not_found(template, _assigns) do
    Phoenix.Controller.status_message_from_template(template)
  end
end

I edited this to

def render("404.html", _assigns) do
    render "404.html", %{}
end

but it didn’t work, how can I fix this?

shahryarjb

shahryarjb OP

Hello, my elixir ver is v1.6.4, I removed my _build and I saw this which was fixed. thank you , I’ll update this soon to 1.7

Where Next? Top

Trending in Questions Top

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews