Не делайте Вас, просто хотите:
",".join(l)
, Очевидно, это становится более сложным, если необходимо заключить запятые в кавычки/выйти и т.д. в значениях. В этом случае я предложил бы смотреть на csv модуль в стандартной библиотеке:
Для этой конкретной задачи вам нужно только изменить соединение с БД, поэтому, как указал Адам, вы можете сделать это:
namespace :db do
namespace :test do
task :reset do
ActiveRecord::Base.establish_connection('test')
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
ActiveRecord::Base.establish_connection(ENV['RAILS_ENV']) #Make sure you don't have side-effects!
end
end
end
Если ваша задача более сложная и вам нужны другие аспекты ENV, вы безопаснее всего создавать новый процесс сгребания:
namespace :db do
namespace :test do
task :reset do
system("rake db:drop RAILS_ENV=test")
system("rake db:create RAILS_ENV=test")
system("rake db:migrate RAILS_ENV=test")
end
end
end
или
namespace :db do
namespace :test do
task :reset do
if (ENV['RAILS_ENV'] == "test")
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
else
system("rake db:test:reset RAILS_ENV=test")
end
end
end
end
Самым чистым и простым решением было бы переопределить RAILS_ENV
(не ENV ['RAILS_ENV']
)
namespace :db do
namespace :test do
task :reset do
RAILS_ENV = "test"
Rake::Task['db:drop'].invoke
Rake::Task['db:create'].invoke
Rake::Task['db:migrate'].invoke
end
end
end
Во время процесса загрузки Приложение Rails RAILS_ENV инициализируется следующим образом
RAILS_ENV = (ENV['RAILS_ENV'] || 'development').dup unless defined?(RAILS_ENV)
Остальной код Rails напрямую использует RAILS_ENV
.
Однако, как указал Майкл в комментарии к своему ответу, переключение RAILS_ENV
на лету может быть рискованно. Другой подход - переключить соединение с базой данных, это решение фактически используется по умолчанию db: test
tasks
ActiveRecord::Base.establish_connection(:test)
The best way of course is to specify the environment from the command line when you run the rake task, but if for some reason that's not what you want to do, you can do this:
ENV["RAILS_ENV"] = 'test'
RAILS_ENV.replace('test') if defined?(RAILS_ENV)
load "#{RAILS_ROOT}/config/environment.rb"
And that should do the trick.