【发布时间】:2017-01-17 20:49:21
【问题描述】:
对于一个 Rails 应用程序,我使用 seed.rb 来使用记录和相关的图像上传来填充数据库。 seed.rb 从给定的 YAML 文件中获取所有记录数据,并从文件夹中抓取图像文件以上传它们。这在开发环境中运行良好:
文件夹结构:
rails_app/
db/seeds.rb
...
data/
images1/
image1.jpg
image2.jpg
images2/
...
data.yml
data.yml:
item1:
description: Some description
filepath: images1/image1.jpg
item2:
description: ...
种子.rb:
items = YAML.load_file(File.join(Rails.root, '..', 'data', 'data.yml'))
items.each do |item, details|
# create items with file-uploads, etc.
...
end
由于所有数据库内容都已准备好用于生产,我们希望通过 rake db:seed 为生产数据库播种,并访问我的本地 YAML 文件和图像文件夹,以创建具有相关文件上传的记录。
为了部署,我正在使用 Capistrano 并且已经 found a task 将数据播种到生产环境...
# Add this in config/deploy.rb
# and run 'cap production deploy:seed' to seed your database
desc 'Runs rake db:seed'
task :seed => [:set_rails_env] do
on primary fetch(:migration_role) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "db:seed"
end
end
end
end
...不幸的是,此任务仅适用于生产服务器上的seeds.rb,因此无法在我的本地计算机上找到 YAML 或图像。
如何为 Capistrano 编写任务以访问我的本地 YAML 和文件并将它们 db:seed 到数据库?
(显然,为生产数据库播种不是一种常见的做法,但从客户端获取包含所有文件的 YAML 并且已经使用此“正确”数据进行开发/设计,效果很好)
谢谢!
【问题讨论】:
标签: ruby-on-rails deployment capistrano