If you want to run you rake task without passing the environment variable in the command line argument.

Use Case: The task runs only in production and it needs to be automated.However, we need to pass a command line variable for the task to run.

Following is the task:

namespace :my_task do
   desc "This is a task that runs only in production"
   task :awesome do
      if Rails.env.production?

      end
   end
end

The command used to run the task is as follows :

$ bundle exec rake my_task:awesome RAILS_ENV="production"

We can achieve this by writing another rake task that passes the environment variable to the respective task(s). In case there are a bunch of other tasks you can define them all under the same task.

namespace :my_main_task do
  desc "Use this to fire other tasks"
  task : do
     Rails.env = "Production"
     Rake::Task["my_task:awesome"].invoke
  end
end

Or you can make a direct command call:

namespace :orbit do
  desc "display the current environment of rake"
  task :asset do
     Rails.env = "Production"
     system("rake orbit_task:awesome RAILS_ENV=production")
  end
end

The issue with the second approach is that it will spawn a lot of rake tasks, so the first approach seems better.