zwippie

zwippie

`mix do blog.build, compile --force` does not perform compile step

I have a custom mix task blog.build that converts markdown files to html files and updates a file current_release in the project root folder with some info about the generated files.

# Mix.Tasks.Blog.Build
def run(_) do
  # ..convert pages, do things..
  # The content of some_info contains a timestamp, so it's different every time
  File.write! "current_release", some_info
  # Mix.Task.reenable "compile" # doesn't change things
end

I also have a Plug.Router that, with some metaprogramming, builds routes from that same current_release file (may not be the best idea but hey):

defmodule MyRouter do
  use Plug.Router

  plug :match
  plug :dispatch
  
  @external_resource release_file = "current_release"

  for {title, file} <- (File.read!(release_file) |> Jason.decode!) do
    # ..define a matcher for every blog post..
  end

  # ..catch all route..
  match(_), do: send_resp(conn, 404, "not found")
end

When I run mix do blog.build, compile on the command line, the compile task is not performed. Same thing when I change the command to mix do blog.build, compile --force.

What also baffles me is that the application is only compiled (before running the tasks) once in every two mix invocations:

$ mix compile                                     # to make sure the application is compiled here
$ mix do blog.build, compile --force              # 1st run
 first-post -> static/1552225911/first-post.html  # output from blog.build
 Current release file updated                     # the @external_resource file (in the router) is updated
                                                  # so that on compile time, the router is marked to be recompiled
                                                  # I expected to see log info from the compiler here,
                                                  # we even forced it to run but it keeps silent.
$ mix do blog.build, compile --force              # 2nd run
 Compiling 2 files (.ex)                          # Before the first task is executed the app is recompiled.
                                                  # That is not unexpected because current_release has changed.
 first-post -> static/1552225914/first-post.html
 Current release file updated
                                                  # Still no compiler action here
$ mix do blog.build, compile --force              # 3rd run
                                                  # NO compilation this time like in the 2nd run?!
 first-post -> static/1552225916/first-post.html
 Current release file updated
                                                  # Still no compiler action here
$ mix do blog.build, compile --force              # 4th run
 Compiling 2 files (.ex)                          # Now its compiling again before running the tasks
 first-post -> static/1552225917/first-post.html
 Current release file updated
                                                  # Still no compiler action here

So my questions are:

  • Why does the compile task never (looks like to) get executed when running mix do blog.build, compile --force?
  • Why does changing the contents of the @external_resource file only triggers a compile every other time?

I’ve already tried to Mix.Task.reenable "compile" in blog.build but that didn’t change things.

Erlang/OTP 21 [erts-10.2.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Elixir 1.8.1 (compiled with Erlang/OTP 20)

First Post!

zwippie

zwippie

Bump. Question summary:

When running mix do mystask, compile --force, the compiler task does not run, while the code has a dependency on an @external_resource that has changed due too mytask.

Where Next?

Popular in Questions Top

_russellb
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lists...
New
JulienCorb
I am trying to implement my new.html.eex file to create new posts on my website. new.html.eex: &lt;h1&gt;Create Post&lt;/h1&gt; &lt;%= ...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: The documentation above suggests that while ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

Other popular topics Top

malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36128 110
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 47930 226
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New

We're in Beta

About us Mission Statement