Tôi có một số dữ liệu trong cơ sở dữ liệu phát triển của mình mà tôi muốn sử dụng làm đồ đạc trong môi trường thử nghiệm của mình. Cách tốt nhất trong Rails 2.x để xuất một bảng cơ sở dữ liệu vào một vật cố YAML là gì?Cách tốt nhất để xuất bảng cơ sở dữ liệu sang tệp YAML là gì?
Trả lời
Có một nhiệm vụ cào cho việc này. Bạn có thể chỉ định RAILS_ENV nếu cần; mặc định là môi trường phát triển:
rake db:fixtures:dump
# Create YAML test fixtures from data in an existing database.
Tôi đã sử dụng YamlDb để lưu trạng thái cơ sở dữ liệu của mình.
Install nó với lệnh sau:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Sử dụng các nhiệm vụ cào để đổ nội dung của cơ sở dữ liệu Rails để db/data.yml
rake db:data:dump
Sử dụng nhiệm vụ cào để tải nội dung của db/data.yml vào cơ sở dữ liệu
rake db:data:load
Đây là trang chủ của người sáng tạo:
http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/
Các kho hiện đang duy trì hiện tại là http://github.com/ludicast/yaml_db – Sney
Làm cách nào để có thể nhắm mục tiêu một bảng để đổ, thay vì bán toàn bộ db? –
rake db:fixtures:dump
đã được thay đổi để
rake db:extract_fixtures
+ hoàn hảo, Cảm ơn vì điều này. – Jirapong
Phiên bản đường ray nào? điều này dường như không đúng với 2.x, mà câu hỏi được đặt ra. có lẽ câu trả lời của bạn là cụ thể cho đường ray 3.x? – tehgeekmeister
Nó không có trong vanilla Rails 3.x. – Turadg
Plugin này sẽ bổ sung thêm các chức năng mà bạn muốn. Nó được trích xuất từ ActiveRecord do đó không còn theo mặc định nữa.
script/plugin install http://github.com/topfunky/ar_fixtures
Sau đó chạy:
rake db:fixtures:dump MODEL=ModelName
Đối với Rails 3, nếu bạn muốn để đổ yaml từ DB và sử dụng nó như một vật cố, tôi sử dụng mã này:
module DbToFixture
TEMP_FIXTURE_PATH = Rails.root.join("test", "new_fixtures")
def fixturize(model)
Dir.mkdir(TEMP_FIXTURE_PATH) unless File.exists?(TEMP_FIXTURE_PATH)
fname = model.table_name
file_path = TEMP_FIXTURE_PATH.join(fname)
File.open(file_path, 'w') do |f|
model.all.each do |m|
f.write(m.to_yaml)
end
end
end
end
Tôi chỉ chạy nó từ bảng điều khiển với
require './lib/db_to_fixture'
include DbToFixture
fixturize ModelName
Tôi đã không thể có được ar_fixtures để làm việc với Rails 3 (đã không cố gắng rất khó khăn mặc dù). Yaml db là tuyệt vời cho việc đổ và lưu db, nhưng định dạng của nó không tương thích với các đồ đạc.
Tôi có phải đặt tên tệp là db_to_fixture không? Rails tuyệt vời không có lệnh đơn giản để thực hiện trong các đường ray mới nhất. Đây là điều tôi cần phải làm thường xuyên. –
Thật tuyệt vời. Trong mọi trường hợp, có, nó phải là trường hợp con rắn của bất kỳ module nào được gọi. – jpgeek
Dưới đây là một nhiệm vụ cào mà sẽ làm chính xác điều đó (thử nghiệm trong Rails 3.2.8):
namespace :db do
task :extract_fixtures => :environment do
sql = 'SELECT * FROM "%s"'
skip_tables = ["schema_migrations"]
ActiveRecord::Base.establish_connection
if (not ENV['TABLES'])
tables = ActiveRecord::Base.connection.tables - skip_tables
else
tables = ENV['TABLES'].split(/, */)
end
if (not ENV['OUTPUT_DIR'])
output_dir="#{Rails.root}/test/fixtures"
else
output_dir = ENV['OUTPUT_DIR'].sub(/\/$/, '')
end
(tables).each do |table_name|
i = "000"
File.open("#{output_dir}/#{table_name}.yml", 'w') do |file|
data = ActiveRecord::Base.connection.select_all(sql % table_name.upcase)
file.write data.inject({}) { |hash, record|
hash["#{table_name}_#{i.succ!}"] = record
hash
}.to_yaml
puts "wrote #{table_name} to #{output_dir}/"
end
end
end
end
Nguồn: http://sachachua.com/blog/2011/05/rails-exporting-data-specific-tables-fixtures/
Lưu ý: Tôi đã phải thực hiện một vài thay đổi mã blog để làm cho nó tương thích với nhiều cơ sở dữ liệu hơn và làm việc trong Rails 3.2
Kịch bản hay. Tôi đã phải loại bỏ '.upcase' để làm cho nó hoạt động trong Rails 4 nhưng nếu không, nó hoạt động như quảng cáo. Cảm ơn. –
Đối với bán phá giá đối với rspec/đồ đạc kiểm tra dưa chuột trong Rails 3 này là câu trả lời tốt nhất mà tôi đã tìm thấy: What is the standard way to dump db to yml fixtures in rails?
Iron Fixture Extractor được xây dựng cho mục đích này chính xác. Nó đặc biệt tốt cho các tình huống mà bạn muốn sử dụng các bộ cố định khác nhau cho các kịch bản thử nghiệm khác nhau (thay vì có tất cả các đồ đạc cho tất cả các thử nghiệm). Nó cung cấp chức năng để giải nén, tải, xây dựng lại đồ đạc, cắt bớt bảng, hoặc snagging băm đặc biệt từ tập tin yaml lịch thi đấu của bạn.
Cảm ơn bạn đã giới thiệu tuyệt vời này. Tôi thấy nó đặc biệt hữu ích vì nó cho phép tôi trích xuất một phần dữ liệu cho mục đích thử nghiệm trên một bảng khá lớn. – smile2day
> rails c
irb> puts Modelname.all.to_yaml
dán vào tệp và chỉnh sửa để phù hợp với nội dung mong đợi.
Đó là lao động thủ công nhưng nếu bạn cần điều này chỉ một lần có thể là cách nhanh nhất.
Dường như không hoạt động trên Rails 4. –
ngọc Rất đơn giản sẽ tạo ra đồ đạc yaml từ cơ sở dữ liệu hiện có ...
trình với Rails 4.
- 1. Cách dễ nhất để xuất cơ sở dữ liệu SQLServer 2000 sang XML là gì?
- 2. Cơ sở dữ liệu "tốt nhất" để nhúng là gì?
- 3. Cách tốt nhất để chuyển đổi cơ sở dữ liệu mysql thành cơ sở dữ liệu sqlite là gì?
- 4. Cách tốt nhất để thiết kế kịch bản cơ sở dữ liệu này là gì?
- 5. Cách tốt nhất để trích xuất dữ liệu từ cơ sở dữ liệu FileMaker Pro trong tập lệnh là gì?
- 6. Cách tốt nhất để lập chỉ mục dữ liệu bảng cơ sở dữ liệu trong Solr?
- 7. Cách tốt nhất để lưu trữ thẻ trong cơ sở dữ liệu là gì?
- 8. Cách tốt nhất để 'ping' một cơ sở dữ liệu thông qua JDBC là gì?
- 9. Cách tốt nhất để bảo mật chuỗi kết nối cơ sở dữ liệu là gì?
- 10. Có cơ sở dữ liệu YAML không?
- 11. Di chuyển cơ sở dữ liệu MySQL phát triển sang cơ sở dữ liệu sản xuất
- 12. Chuyển đổi từ cơ sở dữ liệu/Excel/CSV sang đồ đạc dữ liệu YAML?
- 13. Cách tốt nhất để chèn cơ sở dữ liệu hàng loạt từ C# là gì?
- 14. Cách tốt nhất để thiết kế cơ sở dữ liệu cho Ruby on Rails là gì?
- 15. Cách tốt nhất để sao chép cơ sở dữ liệu là gì?
- 16. Các tệp cơ sở dữ liệu SQlite tên mở rộng tốt nhất là gì?
- 17. Cách tốt nhất để lưu trữ dữ liệu không lặp lại một lần vào cơ sở dữ liệu là gì?
- 18. Xuất tệp cơ sở dữ liệu sqlite sang XML và sau đó vào bảng tính Excel
- 19. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 20. Cách tốt nhất để lưu trữ cơ sở dữ liệu MySQL trong điều khiển nguồn là gì?
- 21. Cách tốt nhất để kết nối bảng tính với cơ sở dữ liệu web
- 22. Cách tốt nhất để lưu trữ/truy xuất dữ liệu cho máy tính để bàn mà không cần sử dụng cơ sở dữ liệu là gì?
- 23. Cách tốt nhất để tìm kiếm kiểu dữ liệu Long trong cơ sở dữ liệu Oracle là gì?
- 24. Cơ sở dữ liệu tốt nhất để sử dụng với chương trình java là gì?
- 25. Sao chép bảng từ một cơ sở dữ liệu sang một cơ sở dữ liệu khác
- 26. Cách sao chép bảng từ một cơ sở dữ liệu mysql sang cơ sở dữ liệu mysql khác
- 27. Thiết kế cơ sở dữ liệu tốt (lược đồ) cho cơ sở dữ liệu tham dự là gì?
- 28. Loại trường cơ sở dữ liệu tốt nhất cho URL
- 29. Cách tốt nhất để từ chối một cột trong lược đồ cơ sở dữ liệu là gì?
- 30. Làm cách nào để di chuyển Sơ đồ cơ sở dữ liệu SQL Server sang cơ sở dữ liệu khác?
db: đồ đạc: đổ trên Rails? Tôi không thấy nó trên 2.3.5. – Pablo
có vẻ như nó đã được trích xuất từ ActiveRecord. Bạn có thể thêm lại nó bằng plugin này: http://github.com/topfunky/ar_fixtures Sau đó chạy: rake db: fixtures: dump MODEL = ModelName –
tính năng này chỉ hợp lệ cho Rails 3. – fotanus