【问题标题】:Rails + Capistrano, seed production database with file uploads?Rails + Capistrano,带有文件上传的种子生产数据库?
【发布时间】: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


    【解决方案1】:

    概括地说,您需要创建一个任务,它是deploy:seed先决条件。这将确保您的任务在执行种子脚本之前首先运行。

    就您创建的任务而言,您希望它将某些文件上传到同一服务器,并且相对于将运行种子任务的同一目录。查看您在帖子中粘贴的种子任务,我们可以看到目录为release_path,服务器为primary fetch(:migration_role)

    因此,我建议编写这样的任务:

    task :upload_seed_data do
      on primary fetch(:migration_role) do
        execute :mkdir, "-p", release_path.join("../data")
        upload! "../data/data.yml", release_path.join("../data/data.yml")
        # ... and so on for all files you want to upload
      end
    end
    
    # Register the prerequisite
    before "deploy:seed", :upload_seed_data
    

    【讨论】:

    • 好的,这是否意味着,我基本上将所有内容上传到一个中间文件夹,以便从那里重新上传到我的应用程序?这对我来说听起来有点啰嗦。是否有任何方法可以将开发与生产数据库同步?谢谢。
    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多