耙不使用与phusion乘客设置相同的环境值

时间:2014-06-13 21:04:39

标签: ruby-on-rails environment-variables passenger

在我的虚拟主机中,我有:

<Directory /var/www/prod/myapp/myapp/public>
  ...
  RailsEnv production
  ...
</Directory>

虽然依赖于production的任何代码正在应用程序本身正常运行(例如:Rails.env.production?时显示Google Analytics代码),当我从rake about运行/var/www/prod/myapp/myapp时{1}},我明白了:

Application root          /var/www/prod/myapp/myapp
Environment               development
Database adapter          mysql2

这意味着我必须使用RAILS_ENV=production为任何与部署相关的rake内容添加前缀。当然,这一切都在部署脚本中,所以它并不重要,但为什么Rake不知道它是生产?乘客设置不应该足够吗?如果没有,我该如何解决它,所以我不需要手动指定环境?

旁注:我在同一个盒子上运行应用程序的开发实例,并将Environment设置为相应vhost配置中的开发。

编辑:Phusion Passenger版本4.0.20

2 个答案:

答案 0 :(得分:1)

耙子完全没有意识到乘客的配置。它甚至不知道你正在使用乘客。由于它不是由乘客发起的,它必须(假设它知道你正在使用apache / passenger)解析apache配置文件以找到它,这将变得相当复杂,尤其是在存在多个应用程序的情况下。

你可以在你的一个shell的启动文件中设置它,但是如果你在同一台机器上有多个环境,这听起来不是一个好主意。

你可以坚持

ENV['RAILS_ENV']='production'

在Rails&#39;之一的顶部启动文件 - boot.rb似乎可以解决问题。这会使乘客的设置无效,显然你只想在脚本的生产部署中这样做。

就个人而言(特别是在运行多个环境的机器上)我坚持输入RAILS_ENV =生产。

答案 1 :(得分:0)

  

但为什么Rake不知道它的生产?

因为rake和所有rails相关命令在内部执行此操作

ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development"

这意味着如果您没有RAILS_ENVRACK_ENV环境,那么默认情况下它将使用development环境。

  

乘客设置不足以满足要求吗?

NO。 Passenger设置仅用于使您的应用程序在欲望或虚拟环境中生效/生活。它不会改变任何系统配置。

  

如果没有,我该如何修复它以便我不需要手动指定环境?

这很容易。只需设置环境变量。如果您使用bash(通常是人们),您可以简单地执行此操作

echo "export RAILS_ENV=production" >> ~/.bashrc ; source ~/.bashrc

这会使您的服务器成为rails production服务器,因此如果您运行rails crake db:migrate等或任何railsrake命令,它将会运行所有可用应用程序的production服务器。

  

我在同一个盒子上运行app的开发实例,在相应的vhost配置中将Environment设置为development。

这是一个问题。如果您设置了上述环境变量,那么每当您在此应用程序中运行rake db:migrate之类的任何代码时,这将在production环境中运行。为避免这种情况,您不要在每个命令上设置环境变量或指定环境。有一个黑客可用。在config/boot.rb

的顶部添加此行
  ENV["RACK_ENV"] = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development"

未来阅读:How can I make a custom environment in rails a default environment?