Compilation error for mix ecto.migrate

Hello everybody,

I’m following guidelines and instructions of the well-known Phoenix book “Programming Phoenix” and as I’m now on page 93 I tried to execute “mix ecto.migrate” after generating the resources.

The command shell outputs this error:

Compiling 13 files (.ex)

    == Compilation error on file web/views/video_view.ex ==
    ** (SyntaxError) web/templates/video/index.html.eex:16: unexpected token: "\" (column 8, codepoint U+005C)
        (eex) lib/eex/compiler.ex:36: EEx.Compiler.generate_buffer/4
        (eex) lib/eex/compiler.ex:43: EEx.Compiler.generate_buffer/4
        (phoenix) lib/phoenix/template.ex:378: Phoenix.Template.compile/2
        (phoenix) lib/phoenix/template.ex:186: Phoenix.Template."-MACRO-__before_compile__/2-fun-0-"/3
        (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
        (phoenix) expanding macro: Phoenix.Template.__before_compile__/1
        web/views/video_view.ex:1: Rumbl.VideoView (module)
        (elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1

I updated the router with the new resources before that.

I hope this is informative. Of course I can provide further details if needed.

Can you detect what kind of problem this is?

Thank you

It would help if you include the code you get the compilation error on.

1 Like

please show us the content of web/templates/video/index.html.eex

1 Like

It seems to be explicit, You should show us the video/index.html, especially line 8 of this file :slight_smile:

1 Like

@kokolegorille where do you read line 8? I read line 16, coloumn 8…

2 Likes

Oh yes, it’s column 8…

1 Like

So this is my web/templates/video/index.html.eex

<h2>Listing videos</h2>

<table class="table">
  <thead>
    <tr>
      <th>User</th>
      <th>\</th>

      <th></th>
    </tr>
  </thead>
  <tbody>
<%= for video <- @videos do %>
    <tr>
      <td><%= video.user_id %></td>
      <td><%= video.\ %></td>

      <td class="text-right">
        <%= link "Show", to: video_path(@conn, :show, video), class: "btn btn-default btn-xs" %>
        <%= link "Edit", to: video_path(@conn, :edit, video), class: "btn btn-default btn-xs" %>
        <%= link "Delete", to: video_path(@conn, :delete, video), method: :delete, data: [confirm: "Are you sure?"], class: "btn btn-danger btn-xs" %>
      </td>
    </tr>
<% end %>
  </tbody>
</table>

<%= link "New video", to: video_path(@conn, :new) %>

There is video.\ that causes the error

The block should be

        <td><%= video.user_id %></td>
        <td><%= video.url %></td>
        <td><%= video.title %></td>
        <td><%= video.description %></td>
1 Like

Thanks, the command shell isn’t putting out an error for index.html.eex anymore.

Now it complains about web/templates/video/show.html.eex:

== Compilation error on file web/views/video_view.ex ==
** (SyntaxError) web/templates/video/show.html.eex:12: unexpected token: "\" (column 9, codepoint U+005C)
    (eex) lib/eex/compiler.ex:36: EEx.Compiler.generate_buffer/4
    (phoenix) lib/phoenix/template.ex:378: Phoenix.Template.compile/2
    (phoenix) lib/phoenix/template.ex:186: Phoenix.Template."-MACRO-__before_compile__/2-fun-0-"/3
    (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
    (phoenix) expanding macro: Phoenix.Template.__before_compile__/1
    web/views/video_view.ex:1: Rumbl.VideoView (module)
    (elixir) lib/kernel/parallel_compiler.ex:117: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1

My web/templates/video/show.html.eex file is:

<h2>Show video</h2>

<ul>

  <li>
<strong>User:</strong>
<%= @video.user_id %>
  </li>

  <li>
<strong>\:</strong>
<%= @video.\ %>
  </li>

</ul>

<%= link "Edit", to: video_path(@conn, :edit, @video) %>
<%= link "Back", to: video_path(@conn, :index) %>

So the correction of this error follows a similar pattern?

Yes, like this

  <li>
    <strong>User:</strong>
    <%= @video.user_id %>
  </li>

  <li>
    <strong>Url:</strong>
    <%= @video.url %>
  </li>

  <li>
    <strong>Title:</strong>
    <%= @video.title %>
  </li>

  <li>
    <strong>Description:</strong>
    <%= @video.description %>
  </li>

But I find it strange, because when doing this last year, I do recall there were generated.

I’m just trying to guess why You have these mistakes. If You are using a unix shell, You might want to look at history and check if You entered right shell commands

1 Like

Thanks for the code. I’m going to put it in.

And right, I thought of the same. The code that I’m getting those errors on wasn’t touched by me but generated by the command

mix phoenix.gen.html Video videos user_id:references:users
url:string title:string description:text* creating web/controllers/video_controller.ex

as instructed on page 92. So we can conclude, this is implicating a previous false / missed shell command? Or could it be caused by a bad code in another file, or possibly both?

\ is special character :slight_smile: used for escaping the next one. It is not a part of the actual command. It is a formatting sign when You want to split one command into multiple lines.

If You read this in a book, it is because it indicates an escaped breakline, meaning the author will continue the command on next line.

If You type it in the shell, on one line, You must not use it.

Or break the line just after

1 Like

mix ecto.migrate is working now after putting in the code for web/templates/video/show.html.eex that you provided.

I wasn’t aware of that, I will certainly be cautious about it in the future. Thanks for your support.

You are welcome :slight_smile:

Please note that if your issue is fixed, You can mark the topic as closed

1 Like