2010-11-15 31 views
6

Tôi đang sử dụng kim hoàn để tạo đá quý cho Rails 3. Đá quý có chứa một công việc cào và một trong những thứ nó làm là xóa DB, vì vậy tôi đang sử dụng 'database_cleaner' .Yêu cầu một viên đá quý bên trong nhiệm vụ cào của đá quý

tôi xác định sự phụ thuộc ngọc bên Gemfile của đá quý

gem 'database_cleaner' 

Và trong Rakefile

Jeweler::Tasks.new do |gem| 
    ... 
    gem.add_dependency 'database_cleaner' 
end 

Sau đó bên trong lib tôi đã tạo ra các tập tin my_gem.rb và tasks.rake. Như sau, my_gem.rb:

module MyGem 
    class Railtie < Rails::Railtie 
    rake_tasks do 
     load 'tasks.rake' 
    end 
    end 
end 

Và tasks.rake:

task :my_task do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.clean 
end 

Tôi đã cài đặt đá quý (sudo cào cài đặt), tạo ra một dự án đường ray trống và bổ sung phụ thuộc ngọc trong đường ray Gemspec (gem 'my_gem'). Nhưng khi tôi cố gắng chạy rake my_task tôi gặp lỗi uninitialized constant DatabaseCleaner.

Tôi cũng đã thử thêm require 'database_cleaner' từ bên trong nhiệm vụ, làm tăng lỗi no such file to load -- database_cleanergem 'database_cleaner' làm tăng lỗi database_cleaner is not part of the bundle. Add it to Gemfile..

Có cách nào để giải quyết điều này mà không cần thêm gem 'database_cleaner' vào Gemspec của dự án đường ray không?

Cảm ơn

UPDATE (thêm liên kết đến mã nguồn): https://github.com/jordinl/dummy_tasks

+0

bạn có thể đăng mygem.gemspec từ đá quý và Gemfile.lock khỏi ô trống ray ứng dụng? – johnmcaliley

+0

này! Tôi đã thêm liên kết đến repo github. cảm ơn! – jordinl

Trả lời

3

Dưới đây là những gì tôi đã làm để làm cho nó làm việc:

https://github.com/johnmcaliley/dummy_tasks/commits/master

tasks.rake

require 'database_cleaner' 
require 'dummy_tasks' 

namespace :db do 
    task :dummy => :environment do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.clean            
    Rake::Task['db:seed'].invoke  
    end 
end 

Có thể có một cách thanh lịch hơn để thực hiện việc này, nhưng điều này ít nhất sẽ ngăn bạn phải thêm gem_cleaner gem vào ứng dụng Gemfile

+0

cảm ơn rất nhiều người! – jordinl

+2

Liên kết là 404 ngay bây giờ. Bạn có thể vui lòng giải thích: chính xác bạn đã làm gì ở đây và tại sao? – amoebe

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