2012-03-19 37 views
7

Tôi đang cố gắng thực hiện rake db:test:prepare từ một tác vụ khác.Thực thi db: test: chuẩn bị từ một nhiệm vụ rake khác

namespace :db do 
    namespace :populate do 
    desc "Seed development database" 
    task development: :environment do 
     puts "Kill local server" 
     %x{ ps xauwww | grep -i --regex="[t]hin" | awk '{print $2}' | xargs kill } 
     puts "Resetting development database" 
     Rake::Task['db:reset'].execute 
     puts "Migrating development database" 
     Rake::Task['db:migrate'].execute 
     puts "Populating development database" 
     Rake::Task['db:populate'].execute 
     puts "Pepare test database" 
     Rake::Task['db:test:prepare'].execute 
     puts "Start local server" 
     system 'thin -d start' 
    end 
    … 
end 

Sử dụng lời gọi thay vì thực thi sẽ không hữu ích. Có vẻ như để làm việc tốt nếu tôi xác định nó bằng cách riêng của mình:

task example: :environment do 
    Rake::Task['db:test:prepare'].execute 
end 

Khi tôi chạy rake db:populate:development, tất cả các nhiệm vụ được chạy trừ Rake::Task['db:test:prepare'].execute. Không có hoạt động nào trong nhật ký phát triển cho lệnh đó, nhưng nó không ngăn tác vụ tiếp theo chạy (khởi động máy chủ). Thông thường, tôi thấy một số câu lệnh SQL khi tôi tự chạy db:test:prepare.

Ghi chú:

$ rails -v 
Rails 3.2.2 

$ ruby -v 
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0] 

$ uname -a 
Darwin hook 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64 

Trả lời

0

Hãy thử Rake::Task['db:test:prepare'].invoke thay vì .execute, để nó chạy nhiệm vụ phụ thuộc đầu tiên. Nhưng nó chỉ gọi nhiệm vụ nếu nó không được gọi trước.

Tham khảo: this

+0

Tôi có cùng một vấn đề và điều này không giải quyết được cho tôi. – jrdioko

1

Tôi biết điều này không phải là cách đúng để làm việc đó, nhưng tôi đã gặp vấn đề tương tự và kết thúc gọi đó là sử dụng:

`rake db:test:prepare` 

Đây là phương pháp duy nhất mà dường như làm việc cho tôi.

0

Nhiệm vụ Rake có thể được chuyển đến dòng này https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364ActiveRecord::Base.configurations để trống. Biến này được đặt ở đây https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L5 (xem https://github.com/rails/rails/blob/370e1ad3f1f30f955bd781f0ecd113409b8ccf8f/activerecord/lib/active_record/tasks/database_tasks.rb#L21).

Có khả năng rằng database.yml của bạn thiếu môi trường hiện tại hoặc có điều gì khác xóa cấu hình không?

+0

Ý tưởng hay, nhưng cũng không phải vậy. 'Database.yml' được thiết lập đúng và kiểm tra' ActiveRecord :: Base.configurations.blank? 'Trong tác vụ rake tùy chỉnh của tôi trả về' false'. – jrdioko

+0

Bạn đang đặt câu lệnh gỡ rối ở đâu? Bạn có thể thử thêm nó ngay trước dòng https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364 không? – gwintrob

+0

Tôi chỉ cố gắng và vẫn nhận được 'sai'. Và với trình gỡ lỗi tôi đã có thể bước qua và xác nhận rằng nó đã được nhập vào mệnh đề 'trừ' (và từ đó bước vào Rails internals mà tôi không hoàn toàn hiểu). – jrdioko

Các vấn đề liên quan