我在笔记本电脑上处理网络项目。当我完成后,我将文件上传到制作中。每次上传到制作时,我都要确保将javascript代码中的各种网址更改为生产网址。例如:
var ping_url = 'http://10.10.128.233' // locally
//var ping_url = 'http://ping.service.com' // in production
我在代码的不同部分有3个这样的网址。我经常忘记在上传到制作之前更改它们,结果我打破了生产网站。
有没有办法检查我是否在笔记本电脑或生产中运行网站?
我想写:
if (local) {
var ping_url = 'http://10.10.128.233' // locally
}
else {
var ping_url = 'http://ping.service.com' // in production
}
有什么想法吗?
答案 0 :(得分:2)
您可以随时检查location.hostname
并将其与'localhost'
或您在笔记本电脑上使用的任何主机名进行比较。例如
var ping_url = ~location.hostname.indexOf('localhost')
? 'http://10.10.128.233' : 'http://ping.service.com'
答案 1 :(得分:2)
理想情况下,您有一个部署系统,可以准备和部署您的应用程序,并在此过程中处理环境差异。例如,我偏向Capistrano。要部署我的项目,我在命令行上键入cap deploy
,它运行构建/打包/配置脚本,将站点上载到服务器,然后在那里运行迁移后脚本。您可以在此过程中部署不同的配置文件,或者在此过程中对Javascript文件进行后处理。有很多不同的方法来改变这种变化,所有这些都适用于不同的目的。
如果您使用任何类型的服务器端语言,则可能需要使用以下任何一种语言:
<?php if (...) : ?>
var ping_url = '...';
<? else : ?>
var ping_url = '...';
<?php endif; ?>
或
var ping_url = <?php echo json_encode($config['pingUrl']); ?>;
环境变量在这里非常有用;即在您的Apache配置或.htaccess文件中,您可以使用以下内容:
SetEnv MYAPP_ENVIRONMENT production
在您的应用中,您可以按照以下方式执行操作:
$environment = getenv('MYAPP_ENVIRONMENT') ?: 'development';
然后你会进一步决定你的环境。
您必须弄清楚服务器端处理,环境变量和部署时间处理的哪种组合最适合您。