Rails应用程序无法部署在弹性beanstalk上

时间:2016-09-05 20:52:15

标签: ruby-on-rails ruby-on-rails-4 amazon-web-services elastic-beanstalk ebextensions

我有一个使用ruby 2.3的Rails 4应用程序,我想使用AWS Ebs进行部署。我将数据库连接指向现有的数据库,我正在使用cli进行初始化和创建。当我到达创建部分时,我不断收到一条错误消息:

Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/12_db_migration.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

这当然意味着迁移失败了。当我检查日志时它表示表已经存在,我做了一些研究,发现你可以在.ebextensions/中包含设置,指定不运行迁移或在test和dev上运行bundle。这是我的.ebextensions/ruby-settings.config

option_settings: BUNDLE_WITHOUT: "test:development" RAILS_ENV: production RACK_ENV: production RAILS_SKIP_MIGRATIONS: true

但是仍然无法部署并提供相同的错误消息。问题是,我在这里做错了什么?我已尝试根据我在此blog和AWS文档页面here上找到的教程以不同方式重写此配置文件。

任何关于我做错事的想法都是有帮助的,因为我现在处于亏损状态。

3 个答案:

答案 0 :(得分:2)

将ruby-settings.config更改为以下内容,然后尝试迁移。

option_settings:
        - option_name: BUNDLE_WITHOUT
          value: "test:development"
        - option_name: RAILS_ENV
          value: "production"
        - option_name: RACK_ENV
          value: "production"
        - option_name: RAILS_SKIP_MIGRATIONS
          value: "true"

答案 1 :(得分:0)

我发现我的问题的答案是我已经将.ebextensions添加到我的.gitignore。在部署过程的早期.elasticbeanstalk已经被添加到忽略中,我假设需要对.ebextensions做同样的事情。一次轻微的疏忽导致了很多挫败感。

值得注意的是,当我的配置文件中出现间距问题时,ebcli向我提出错误。我相信error2007s发布的内容是有效的,但其他格式是可以接受的。例如,以下是我的一个配置文件的当前格式:

option_settings:
  aws:ec2:vpc:
    VPCId: vpc-xxxxxxxx
    Subnets: subnet-yyyyyyy,subnet-zzzzzzzz,subnet-wwwwwww,subnet-eeeeeeeee
  aws:autoscaling:launchconfiguration:
    SecurityGroups: sg-00000000

等...

我还建议使用.ebextensions设置环境变量,就像我做的那样:

option_settings:
  aws:elasticbeanstalk:application:environment:
    RAILS_SKIP_MIGRATIONS: true
    RAILS_ENV: production

答案 2 :(得分:0)

文件名:0000.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/02b_set_env_vars.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)
      cd $EB_APP_STAGING_DIR
      ./set-env.sh

还有一些错误,比如 -

  1. 挂钩 /opt/elasticbeanstalk/hooks/appdeploy/pre/12_db_migration.sh 失败
  2. ./set-env.sh 未找到

进去 /opt/elasticbeanstalk/hooks/configdeploy/pre/<>_setup_envvars.sh

复制最后两行-

EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir) $EB_SUPPORT_DIR/export_envvars

并粘贴到 0000.config - 现在文件看起来像 -

文件名:0000.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/02b_set_env_vars.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      EB_SUPPORT_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k support_dir)
      $EB_SUPPORT_DIR/export_envvars