2014-10-16 41 views
0

得到錯誤,同時通過rake任務Rake任務,以database.example.yml複製到的database.yml

copy_files.rake

namespace :copy do 
    desc "copy database.yml & application.yml" 
    task :config_files => :environment do 
    source = File.join(Rails.root, "config", "database.example.yml") 
    target = File.join(Rails.root, "config", "database.yml") 
    FileUtils.cp_r source, target 
    end 
end 

錯誤複製database.example.yml到的database.yml

$ rake copy:config_files 
rake aborted! 
Cannot load `Rails.application.database_configuration`: 
Could not load database configuration. No such file - 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/application/configuration.rb:105:in `database_configuration' 
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.4/lib/active_record/railtie.rb:128:in `block (2 levels) in <class:Railtie>' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/lazy_load_hooks.rb:38:in `instance_eval' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/lazy_load_hooks.rb:38:in `execute_hook' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/lazy_load_hooks.rb:27:in `each' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/lazy_load_hooks.rb:27:in `on_load' 
/Library/Ruby/Gems/2.0.0/gems/activerecord-4.1.4/lib/active_record/railtie.rb:118:in `block in <class:Railtie>' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:30:in `instance_exec' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:30:in `run' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:55:in `block in run_initializers' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/initializable.rb:54:in `run_initializers' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:300:in `initialize!' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/railtie.rb:194:in `public_send' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/railtie.rb:194:in `method_missing' 
/config/environment.rb:5:in `<top (required)>' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `require' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `block in require' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:232:in `load_dependency' 
/Library/Ruby/Gems/2.0.0/gems/activesupport-4.1.4/lib/active_support/dependencies.rb:247:in `require' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:276:in `require_environment!' 
/Library/Ruby/Gems/2.0.0/gems/railties-4.1.4/lib/rails/application.rb:379:in `block in run_tasks_blocks' 
Tasks: TOP => copy:config_files => environment 
(See full trace by running task with --trace) 

我看到錯誤是因爲沒有database.yml文件。是否有任何可能的方法通過rake任務複製database.yml文件?

+1

我認爲答案是 - 沒有。因爲要運行rake任務,你需要有效的環境,沒有'database.yml'是不可能的。也許你可以說出爲什麼要通過rake任務複製數據庫的原因,也許最好通過ruby腳本來完成。 – gotva 2014-10-16 18:59:02

+1

這裏給出了一個例子,http://blog.envylabs.com/post/68063567445/rake-file-tasks,但不知道在哪裏寫任務。 – 2014-10-16 20:13:44

回答

2

我感到驚訝!但@SrikanthJeeva是對的:)

我設法運行沒有database.yml耙任務。你應該刪除:environment,你不能使用Rails.root(因爲你不能加載沒有database.yml的Rails)。這適用於我

desc "copy database.yml & application.yml" 
    task :config_files do 
    source = File.join(Dir.pwd, "config", "database.example.yml") 
    target = File.join(Dir.pwd, "config", "database.yml") 
    FileUtils.cp_r source, target 
    end 
+0

而且對我也有效:)乾杯! – 2014-10-17 18:58:28

0

正如上面評論中提到的@gotva,您需要一個「有效」的環境來運行=> :environment的耙式任務。這樣,rake任務加載Rails環境,它需要一個database.yaml文件。

可以實現與腳本或,例如,使用Ruby成IRB會話:

$ cd /app_rails_root_path 
$ irb 
> Dir.glob("config/*.yml.example").each { |f| FileUtils.cp(f, f.gsub(/\.example/,'')) }