我正在向AWS部署rails应用程序。其中一个gem具有依赖关系,并且在部署期间运行bundle install
之前需要在服务器上安装某些文件。在我的.ebextensions
文件中,我有以下内容
01-oracle_sdk:
sources:
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-sdk-linux.x64-12.2.0.1.0.zip
02-oracle-basic:
sources:
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-basic-linux.x64-12.2.0.1.0.zip
03-oracle_sql_plus:
sources:
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
04-container_commands:
00_oracle_dir:
command: "export LD_LIBRARY_PATH=/usr/lib/instantclient_12_1"
据我所知,这些都不是预先部署的。它尝试安装gem时失败,因为该目录不存在。当我SSH到实例时,LD_LIBRARY_PATH
未设置,并且source
命令没有下载和解压缩任何zip文件。
1)我的语法是否正确2)如何让这些命令执行PRE deploy / bundle install?
答案 0 :(得分:2)
EB有一个特定的文件夹,您可以在其中执行脚本以运行预部署。我在.config
中创建了一个.ebextensions
文件,其中包含我希望在部署之前执行的bash命令。它会在"/opt/elasticbeanstalk/hooks/appdeploy/pre/
中创建一个可以运行的文件
<强> 001_script.config 强>
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/001_oracle.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
bash commands you want executed here
...
...
答案 1 :(得分:1)
首先, .ebextensions 是目录,而不是文件。在该目录中,您需要创建一个扩展名为.config
的文件。
此外,YAML对空白非常敏感,因此您需要与间距保持一致。
请尝试这样做(我不是100%确定sources
可以获取多个文件,但是 - 您可能需要制作三个单独的.config文件...)
<强> .ebextensions / 01-oracle.config 强>
sources:
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-sdk-linux.x64-12.2.0.1.0.zip
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-basic-linux.x64-12.2.0.1.0.zip
/usr/lib: https://s3-us-west-2.amazonaws.com/xyz/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
最后,以这种方式设置LD_LIBRARY_PATH
变量将不起作用;它将在部署期间设置,但不会持久。您可以使用eb setenv
从命令行设置环境变量,也可以从ElasticBeanstalk控制台的Configuration选项卡设置环境变量。
可以找到更多信息in the documentation。