上传到生产时总是 运行 rake 任务

Always run rake task when uploading to production

我熟悉 Rails 但这是我第一次上传到生产环境。我能够成功地将我的应用程序上传到 AWS 并进行部署。但是,每次我这样做时,我都必须通过 ssh 进入我的服务器并 运行 必要的 rake 任务来清理我的模型并全面准备我的网站。是否有像 production.rb 这样的文件,您可以在其中编写一个脚本,以便在每次上传产品时成为 运行。例如 运行 所有测试和 rake 测试?有人有一个简单的脚本示例吗?这是我的 rake 文件的例子。

注意:我正在使用 AWS Beanstalk,非常容易部署,只是想 运行 一些 post 生产就绪脚本。

这是我想要 运行 命令 post 部署的 rake 文件。

require "#{Rails.root}/app/helpers/application_helper"
include ApplicationHelper

namespace :db do
  desc "Generate a new blog post markdown"
    task new_article: :environment do
    cp 'lib/assets/articles/template.md', "lib/assets/articles/NEW_ARTICLE#{Time.now.strftime("%s")}.md"
    puts 'new article created!'
  end

   task populate: :environment do
    Article.destroy_all

    if User.count == 0
        User.create!(name: "AJ", email: "aj@psychowarfare.com")
    end

    puts Dir.pwd
    a = File.join("lib", "assets", "articles", "*.md")
    Dir.glob(a).reject { |name| /.*(template|NEW_ARTICLE).*/ =~ name }.each do |file|
      File.open(file, "r") do |f|
        contents = f.read
        mkdown = Metadown.render(contents)
        md = mkdown.metadata

        unrendered_content = contents.sub(/^---(\n|.)*---/, '')
        #puts unrendered_content


        article = Article.create!(title: md["title"],
                        content: markdown(unrendered_content),
                        header_image: md["header_image"],
                        published: md["published"],
                        useful_links: md["useful_links"],
                        people_mentioned: md["people_mentioned"],
                        written_at_date: md["written_at_date"],
                        timestamp: md["timestamp"],
                        embedded_link: md["embedded_link"],
                        user: User.first)


        article.add_tag(md["tags"])
        puts article.useful_links
        puts article.people_mentioned
        puts article.header_image
        puts article.tags

      end
    end

    puts "Article Count: #{Article.count}"
  end



end

对于post部署,您可以尝试以下方式。

.ebextensions/01_build.config

中创建一个文件
commands: 
    create_post_dir:          
       command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
       ignoreErrors: true 
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
  mode: "000755" 
  owner: root 
  group: root 
  content: | 
      #!/usr/bin/env bash 
      cd /var/app/current/app/ 
      Your-Post-Deploy-Command1
      Your-Post-Deploy-Command2
      Your-Post-Deploy-Command3

这个配置的作用是:

  • 创建“post”目录,如果它不存在(它不会被 默认)——忽略任何错误(例如如果目录已经
    存在)

  • 将具有适当权限的shell脚本部署到正确的目录

有关详细信息,请参阅以下参考资料:Blog-Article &