Rah*_*har 42 capistrano ruby-on-rails environment-variables capistrano3
我已经切换到使用环境变量进行配置,它运行得很好 - 除非我必须使用capistrano部署或运行任务.
Capistrano 3似乎执行每个命令前缀,/usr/bin/env它会删除我设置的任何环境变量.bashrc.
编辑 - 在进行更多的研究时,这可能不是问题,问题可能是因为capistrano作为非登录,非交互式shell执行而且不加载.bashrc或.bash_profile.但仍然陷入困境.
当capistrano执行任务时,确保设置环境变量的最佳方法是什么?
Ric*_*eck 50
你可能最好看看和之间的区别ENVIRONMENT VARIABLESSHELL VARIABLES
当您启动SSH时,您的应用程序将加载您.bashrc文件中定义的SHELL变量.这些只存在于shell的生命周期中,因此,我们不会像ENVvars 一样使用它们
你可能会更好地将ENV变量放入:
/etc/environment
Run Code Online (Sandbox Code Playgroud)
像这样:
export ENVIRONMENT_VAR=value
Run Code Online (Sandbox Code Playgroud)
这将使变量在整个系统中可用,而不仅仅是在不同的shell会话中
更新
你有没有尝试过
Capistrano:我可以为整个上限会话设置一个环境变量吗?
set :default_env, {
'env_var1' => 'value1',
'env_var2' => 'value2'
}
Run Code Online (Sandbox Code Playgroud)
Del*_*eko 48
虽然已经回答了这个问题,但我将把它留在这里以防万一其他人处于同样的情况.
Capistrano 确实加载.bashrc.但是如果您注意到文件的顶部有这样的:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)
解决方案只是将任何设置置于此之上,而Capistrano就是我想要的.
在这个GitHub问题上也注意到了这个解决方案.
Tom*_*art 16
为了config/deploy.rb使用简单的任务调试问题更新:
namespace :debug do
desc 'Print ENV variables'
task :env do
on roles(:app), in: :sequence, wait: 5 do
execute :printenv
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在运行cap staging debug:env.您应该能够看到ENV变量的有效配置.
文件的顺序和名称取决于您的发行版,例如在Ubuntu上的采购顺序如下:
/etc/environment/etc/default/locale/etc/bash.bashrc~/.bashrc当~/.bashrc包含这样的第一行时,之后的任何代码都不会被获取:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)
要了解如何capistrano加载ENV变量,此图表(源)可能会有所帮助.
~/.bash*由于非交互式会话,很可能未加载该文件.
| 归档时间: |
|
| 查看次数: |
33598 次 |
| 最近记录: |