为Phusion Passenger应用程序设置环境变量
我已经在开发中设置了Passenger(Mac OS X),它可以完美运行。 后来唯一的问题是:现在我在"/usr/local"
安装了自定义GEM_HOME
路径和ImageMagick二进制文件。 我可以把它们放在一个获取源代码的shell rc文件中,这解决了从控制台生成的进程的环境变量; 但乘客怎么样? 以这种方式运行时,相同的应用程序无法找到我的gem。
我知道两个解决方案。 第一个( 此处记录 )与manveru的基本相同 – 直接在代码中设置ENV变量。
第二种是围绕Passenger使用的Ruby解释器创建一个包装器,并在此处记录 (查找passenger_with_ruby)。 要点是你创建(并将Apache配置中的PassengerRuby指向)/ usr / bin / ruby_with_env,这是一个可执行文件,包括:
#!/bin/bash export ENV_VAR=value /usr/bin/ruby $*
两者都有效; 我认为,前一种方法不那么苛刻。
在你做任何要求之前(特别是在需要rubygems之前)你可以做:
ENV['GEM_HOME'] = '/foo'
这将更改此过程中的环境变量。
我发现如果您在计算机上拥有root权限,那么您可以在“envvars”文件中设置必要的环境变量,apachectl将在启动Apache之前执行此文件。
envvars通常位于apachectl所在的同一目录中 – 在Mac OS X上它位于/ usr / sbin中。 如果找不到它,请查看apachectl脚本的源代码。
更改envvars文件后,使用“apachectl -k restart”重启Apache。
我也遇到过这个问题。 似乎 Passenger没有通过使用SetEnv
apache指令设置的值 – 这是不幸的。
也许有可能在你的environment.rb或boot.rb中设置环境变量(假设你在谈论Rails应用程序;我不熟悉Rack,但可能它有类似的function)
- vagrant plugin安装错误`gem install little-plugger -v’1.1.4’`在捆绑之前成功
- Ruby:每X个字符插入一次空格
- 准备好的陈述已经存在
- 在Ruby on Rails中,’#encoding:utf-8’和’config.encoding =“utf-8”’有什么不同?
- Rails 3设计了401个未经授权的ajax呼叫
- 安装rvm“bash /root/.rvm/scripts/rvm没有这样的文件或目录”
- 使用Ruby on Rails在PostgreSQL中使用interval
- 如何递归地将YAML文件展平为JSON对象,其中键是以点分隔的字符串?
- Sinatra的好forms助手?