Mix command errors in new project

phoenix
troubleshooting

#1

Hello all, I just got a new work station and have been trying to set up a new Phoenix Project for an app I’m working on. However I’m running into an issue that I haven’t seen before. I’m able to run ‘mix phx.new hello’, but after I ‘cd hello’ and try to run any mix command, I get the following error:

$ mix
.exsCode.LoadError) could not load /Users/htran/Desktop/hello/config/dev
(elixir) lib/code.ex:1147: Code.find_file/2
(elixir) lib/code.ex:706: Code.eval_file/2
(mix) lib/mix/config.ex:187: anonymous fn/2 in Mix.Config.import!/2
(elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
(mix) lib/mix/config.ex:186: Mix.Config.import!/2
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/code.ex:232: Code.eval_string/3

Following the installation guide, I’ve already installed Elixir, Erlang, Phoenix, Node and Postgresql. Is there anything I’m missing?

Not sure if this is relevant but this is my ‘mix -v’

Erlang/OTP 21 [erts-10.1.3] [source] [64-bit] [smp:6:6] [ds:6:6:10] [async-threads:1] [hipe] [dtrace]

I wasn’t getting this kind of error on my previous work station, so I’m thinking I missed a prerequisite or something. Thanks in advance!


#2

Is there anything wrong with your dev.exs file?


#3

I haven’t touched my dev.exs file, do I need to add anything to it? This is what it looks like:

use Mix.Config
# For development, we disable any cache and enable
# debugging and code reloading.
#
# The watchers configuration can be used to run external
# watchers to your application. For example, we use it
# with webpack to recompile .js and .css sources.
config :hello, HelloWeb.Endpoint,
  http: [port: 4000],
  debug_errors: true,
  code_reloader: true,
  check_origin: false,
  watchers: [
    node: [
      "node_modules/webpack/bin/webpack.js",
      "--mode",
      "development",
      "--watch-stdin",
      cd: Path.expand("../assets", __DIR__)
    ]
  ]

# ## SSL Support
#
# In order to use HTTPS in development, a self-signed
# certificate can be generated by running the following
# Mix task:
#
#     mix phx.gen.cert
#
# Note that this task requires Erlang/OTP 20 or later.
# Run `mix help phx.gen.cert` for more information.
#
# The `http:` config above can be replaced with:
#
#     https: [
#       port: 4001,
#       cipher_suite: :strong,
#       keyfile: "priv/cert/selfsigned_key.pem",
#       certfile: "priv/cert/selfsigned.pem"
#     ],
#
# If desired, both `http:` and `https:` keys can be
# configured to run both http and https servers on
# different ports.

# Watch static and templates for browser reloading.
config :hello, HelloWeb.Endpoint,
  live_reload: [
    patterns: [
      ~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
      ~r{priv/gettext/.*(po)$},
      ~r{lib/hello_web/views/.*(ex)$},
      ~r{lib/hello_web/templates/.*(eex)$}
    ]
  ]

# Do not include metadata nor timestamps in development logs
config :logger, :console, format: "[$level] $message\n"

# Set a higher stacktrace during development. Avoid configuring such
# in production as building large stacktraces may be expensive.
config :phoenix, :stacktrace_depth, 20

# Initialize plugs at runtime for faster development compilation
config :phoenix, :plug_init_mode, :runtime

# Configure your database
config :hello, Hello.Repo,
  username: "postgres",
  password: "postgres",
  database: "hello_dev",
  hostname: "localhost",
  pool_size: 10

Sorry if I’m asking anything trivial, this is actually my first time setting up a Phoenix Project by myself.


#4

Maybe it’s trying to find a secret part of a config? Look for something like import_config "dev.secret.exs".


#5

I have the import_config "dev.secret.exs" line in my prod.exs file, but not in my dev.exs file


#6

Which phoenix version do you have?

$ mix phx.new --version

How about recreating your hello project? It should just works fine out of the box.


#7

that can’t be right :slight_smile: Try to generate a completely new project in another dir and see if it works


#8

Phoenix version:

$ mix phx.new --version
Phoenix v1.4.0

I’ve tried several times to create the hello project following the Up and Running guide, I actually just tried again and am still getting the same error.

I’m also on a Mac if that’s relevant at all


#9

Where should the import_config "dev.secret.exs" line be located?

I also just tried to create the project in a different directory and I’m getting the same error, import_config "dev.secret.exs" is also still in the same place.


#10

It should be in the dev config, prod might have its own secret. Try to kill your generator and install it again. Something like mix archive.uninstall phx.new and then mix archive.install hex phx_new 1.4.0.


#11

I just generated a project and see that only prod has a secret and it’s prod.secret: import_config "prod.secret.exs", dev should just work out of the box.


#12

Unfortunately still getting the same error. Like you said, dev should work out of the box, which is why I think there is something wrong with my development environment/how I set it up and not the ‘hello’ project


#13

OK, seems like it, but it can’t find some file (/Users/htran/Desktop/hello/config/dev?). You may push the project into a public repo so that we can try it, if it works in someone else’s environment then it’s on yours.


#14

Yeah the error threw me off, because it says its looking for /config/dev, which looks like a folder, but there are only .exs files in the config directory.

I’ve just uploaded a new phoenix project, hello.


#15

Well, it’s your env - works here :slight_smile: Also the prod config is correct - it requires prod secret (not a dev one) https://github.com/httran192/phx_hello/blob/master/config/prod.exs#L71

Though I’m not sure as to what can cause such an error that you have, sorry. Guess you’re on Mac, maybe someone else can help you out (I’m on Linux).


#16

No problem, thanks for the help and input! At the very least I was able to narrow it down to an environment problem. :slightly_smiling_face:


#17

Please do echo $MIX_ENV | xxd or try iex -S mix and then do i Mix.env there will be a lot of output, I’m interested in the raw binary representation.


#18

Oh, as Mix.env returns an atom, the output will not contain a raw binary…

I hope the echo works…

xxd is part of the vim package set on most linuxes.

Any other program that is able to turn stdin to hex should work as well.

My assumption is, that you got an \r into your MIX_ENV.


#19

Putting IO.inspect(Mix.env) into config/config.exs before the import config should work as well.


#20

:dev gets printed out to the console