这是PATH没有sudo 的变量:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Run Code Online (Sandbox Code Playgroud)
这是PATHsudo 的变量:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Run Code Online (Sandbox Code Playgroud)
据我所知,sudo应该PATH保持不变.这是怎么回事?我该如何改变?(这是在Ubuntu 8.04上).
更新:据我所知,没有任何脚本PATH以任何方式作为root更改.
来自man sudo:
为了防止命令欺骗,当在用户的PATH中搜索命令时(如果一个或两个都在PATH中),sudo会检查``.''和``''(都表示当前目录).但请注意,实际的PATH环境变量未被修改,并且不会更改地传递给sudo执行的程序.
我已经切换到使用环境变量进行配置,它运行得很好 - 除非我必须使用capistrano部署或运行任务.
Capistrano 3似乎执行每个命令前缀,/usr/bin/env它会删除我设置的任何环境变量.bashrc.
编辑 - 在进行更多的研究时,这可能不是问题,问题可能是因为capistrano作为非登录,非交互式shell执行而且不加载.bashrc或.bash_profile.但仍然陷入困境.
当capistrano执行任务时,确保设置环境变量的最佳方法是什么?
我想指示Capistrano加载在远程服务器上定义的环境变量.我怎样才能做到这一点?
似乎当我在环境变量中导出我的环境变量时.bashrc,它们不会被Capistrano考虑在内.Capistrano似乎正在执行a /usr/bin/env来创建执行远程命令的环境,但这似乎并没有从中加载环境变量.bashrc.
我也告诉你我也在使用rvm-capistrano(以防万一它可能有帮助).
任何线索?
我看到了这个解决方案的所有答案,但没有为我工作.
1 - 我的配置部署与DigitalOcean(Capistrano 3,Nginx和Puma)的本教程相同,部署成功,我的网页出错:
发生了未处理的低级错误.应用程序日志可能包含详细信息
在日志中:
机架应用程序错误:#<RuntimeError:缺少
secret_token和secret_key_base'生产'环境,请在config/secrets.yml>中设置这些值
2 - 在我的Droplet或VPN中,我使用rake secret文件中的key()创建了变量./bashrc
export SECRET_KEY_BASE=XXXXXX
Run Code Online (Sandbox Code Playgroud)
文件 /config/secrets.yml是默认的
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
有了这个env变量,我检查了比这工作(echo $SECRET_KEY_BASE或printenv | grep SECRET_KEY_BASE)
3 - 重新启动Puma和Nginx并且此错误未解决后,我不知道检查或调试此错误的最佳方法是什么.
是否本教程不使用此解决方案的工作?
deployment capistrano ruby-on-rails nginx environment-variables
使用capistrano 3添加环境变量的最佳方法是什么?
我试过了两个
set :default_env, {
'MAILCHIMP' => 'verylongstring'
}
Run Code Online (Sandbox Code Playgroud)
和
set :default_environment, {
'MAILCHIMP' => 'verylongstring',
}
Run Code Online (Sandbox Code Playgroud)
但似乎没有人做任何有用的事情.