Ruby on rails Rake未使用与phusion乘客设置相同的环境值
在我的vhost中,我有:Ruby on rails Rake未使用与phusion乘客设置相同的环境值,ruby-on-rails,environment-variables,passenger,Ruby On Rails,Environment Variables,Passenger,在我的vhost中,我有: <Directory /var/www/prod/myapp/myapp/public> ... RailsEnv production ... </Directory> 这意味着我必须用RAILS\u ENV=production作为任何与部署相关的rake内容的前缀。诚然,在这一点上,这一切都在一个部署脚本中,所以这并不重要,但为什么Rake没有意识到这是生产呢?乘客设置是否足够?如果没有,我如何修复它,使我不需要手动指定环境
<Directory /var/www/prod/myapp/myapp/public>
...
RailsEnv production
...
</Directory>
这意味着我必须用RAILS\u ENV=production
作为任何与部署相关的rake内容的前缀。诚然,在这一点上,这一切都在一个部署脚本中,所以这并不重要,但为什么Rake没有意识到这是生产呢?乘客设置是否足够?如果没有,我如何修复它,使我不需要手动指定环境
旁注:我在同一个框中运行应用程序的开发实例,环境在其相应的vhost配置中设置为development
编辑:Phusion乘客版4.0.20rake完全不知道乘客的配置。它甚至不知道你在用乘客。由于它不是由passenger启动的,因此它必须(假设它知道您使用的是apache/passenger)解析apache配置文件才能找到答案,这将变得相当复杂,尤其是在存在多个应用程序的情况下 您可以在shell的一个启动文件中进行设置,但是如果您在同一台机器上有多个环境,这听起来不是一个好主意 你可以坚持下去
ENV['RAILS_ENV']='production'
在Rails的一个启动文件的顶部,boot.rb似乎起到了作用。但这会使passenger的设置无效,显然,您只希望在脚本的生产部署中执行此操作
就我个人而言(特别是在一台运行着多个环境的机器上),我会坚持键入RAILS\u ENV=production
但为什么Rake不知道这是生产
因为rake
和所有rails
相关命令都在内部执行此操作
ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development"
这意味着,如果您没有RAILS\u ENV
或RACK\u ENV
环境,那么默认情况下,它将使用development
环境
乘客设置是否足够
不。Passenger
设置仅用于制作您的应用程序/生活在渴望中,或者说是虚拟环境。它不会改变任何系统配置
如果没有,我如何修复它,使我不需要手动指定环境
那很容易。只需设置环境变量。如果您使用的是bash
(通常人们会这样做),您可以简单地执行此操作
echo "export RAILS_ENV=production" >> ~/.bashrc ; source ~/.bashrc
这将使您的服务器成为rails production
server,因此,如果您运行rails c
或rake db:migrate
etc或任何rails
或rake
命令,它将在production
服务器中为所有可用的应用程序运行
我在同一个框中运行应用程序的开发实例,环境在其相应的vhost配置中设置为development
这是一个问题。如果您设置了上述环境变量,则每当您在此应用程序内运行任何代码(如rake db:migrate
)时,都将在production
环境中运行。若要避免这种情况,请不要在每个命令上设置环境变量或指定环境。有一个黑客可用。在config/boot.rb的顶部包括这一行
ENV["RACK_ENV"] = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development"
未来阅读:你在使用Capistrano吗?rvm?两者都有?rvm,是的,Capistrano,不是。也许问题来自你的部署。你用什么?重读我贴的。我的部署脚本没有任何问题,因为它显式地为命令指定了RAILS_ENV变量。问题是在给定配置的rake级别上,这是否必要。
ENV["RACK_ENV"] = ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development"