在开发 PHP 应用程序时,最好有一个用于开发/测试的服务器,然后是一个实时服务器,一旦准备就绪,您就可以放置所有内容。
好吧,但是怎么做呢?
如果您通过托管公司进行托管,您如何设置自己的开发服务器以在其上模拟所有 LAMP 设置作为您的实时服务器进行测试?因为如果它们不同,那么在一个与现场不同的测试上进行测试,就违背了目的,对吗?
通过同一托管公司使用另一台服务器并要求他们使开发和实时服务器具有完全相同的设置是否更好?
还有什么是最好的工作流程,用于从“实时服务器”中 check out 文件,在“开发服务器”中处理它们,然后将它们检回实时服务器?
谢谢!!
最佳答案
我日常工作的两点:
XAMPP是您在 Windows 上设置 Apache/mySQL/PHP 堆栈的一站式商店。我用它开发并部署到 Linux 机器上,没问题。
如果你想在家用服务器或虚拟机上搭建Linux环境,我刚才问了一个你可能感兴趣的问题:Pre-installed Linux for Web Developers?
Is it better use another server through the same hosting company and ask them make both the development and live ones have the exact same settings?
如果您负担得起第二台服务器,这可能是最好的选择。另一方面,您可以随意升级和摆弄一台本地机器,而所有这一切的长期成本只是第二台租用服务器的一小部分。如果有疑问,我会选择本地机器。
不要忘记 PHP 是一种可移植性很强的语言。如果您不使用任何特定的命令行工具或完全奇异的扩展,让 PHP 应用程序在 Linux 甚至 Windows 上运行是一些设置和细节的问题,但不再是什么大问题。
Also what is the best work-flow to use to check files out from "live server" work on them in the "development server", then check them back into the live server?
这个领域有很多很多的观点和做法。就我个人而言,无论我在哪里使用以下工作流程,它都被证明是理想的——我仍在为所有项目和所有客户亲自实现它。
在 IDE 中本地编辑文件
通过IDE自带的FTP功能上传到开发服务器
在开发服务器上测试
一旦某项功能经过测试并在开发服务器上运行(即“完成”),将整个包 checkin Subversion(或其他)存储库
在实时服务器上,让构建脚本从存储库中 check out 最新修订版,将其下载到具有修订版号的目录,完成后,将指向先前修订版的符号链接(symbolic link)更改为最新的。
这样一来,您对实时环境所做的每项更改都会记录在版本控制系统中,并且恢复到以前的修订版是一个问题,如果几秒钟。对我来说,与到处使用纯 FTP 相比,这是一个巨大的安慰。
可能还有一个有趣的问题:Setting up a deployment / build / CI cycle for PHP projects
关于php - 设置开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2314088/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm