jor*_*inl 6 ruby ruby-on-rails bundler ruby-on-rails-3
我正在使用珠宝商为Rails 3创建一个宝石.宝石包含一个rake任务,其中一件事就是擦除数据库,所以我使用'database_cleaner'.
我在gem的Gemfile中指定了gem依赖项
gem 'database_cleaner'
Run Code Online (Sandbox Code Playgroud)
并在Rakefile中
Jeweler::Tasks.new do |gem|
...
gem.add_dependency 'database_cleaner'
end
Run Code Online (Sandbox Code Playgroud)
然后在lib里面我创建了文件my_gem.rb和tasks.rake.如下,my_gem.rb:
module MyGem
class Railtie < Rails::Railtie
rake_tasks do
load 'tasks.rake'
end
end
end
Run Code Online (Sandbox Code Playgroud)
和tasks.rake:
task :my_task do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean
end
Run Code Online (Sandbox Code Playgroud)
我安装了gem(sudo rake install),创建了一个空的rails项目,并在rails的Gemspec(gem 'my_gem')中添加了gem依赖项.但是当我尝试运行时,rake my_task我得到了错误uninitialized constant DatabaseCleaner.
我也尝试require 'database_cleaner'从任务内部添加,这会引发错误no such file to load -- database_cleaner并gem 'database_cleaner'引发错误database_cleaner is not part of the bundle. Add it to Gemfile..
有没有办法解决这个问题,而无需添加gem 'database_cleaner'到rails项目的Gemspec?
谢谢
更新(添加源代码的链接):https: //github.com/jordinl/dummy_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
Run Code Online (Sandbox Code Playgroud)
可能有一种更优雅的方法来做到这一点,但这至少应该可以防止您必须将database_cleaner gem 添加到应用程序Gemfile
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |