我有一个Ruby on Rails应用程序,需要在Azure Worker Role中找到一个home。
我目前使用批处理文件自动部署应用程序 - 这个文件接受apache和ruby安装程序,运行它们,然后将RoR应用程序放在适当的目录中。批处理脚本完成后,Apache通过端口80向应用程序提供服务。
我是Azure的新手,并试图找出如何做到这一点。
根据我的理解,我在这里有两个选项:OnStart,其中包含Blob存储中的安装文件或启动脚本。我不知道如何做后者,但我在我刚刚创建的新Azure项目中的WorkerRole.vb文件中找到了onStart方法。
我的问题:是否建议使用OnStart部署应用程序(使用批处理脚本)?如果是这样,我将如何将脚本集成到项目中?而且 - 如何开始存储和引用blob存储中的文件?
我知道这些都是超级高级问题。任何输入或建议的阅读都会非常有用。我试图谷歌/搜索相关的资源,但一直没有找到太多。感谢您的时间!
答案 0 :(得分:2)
当您在OnStart()函数内部时,最好进行角色配置,例如IP绑定等,但是如果您想安装运行时,下载应用程序zip,配置角色特定设置,最好使用启动任务。请访问我的博客Windows Azure: Startup task or OnStart(), which to choose?以了解有关它的更多信息。
现在,在您的情况下,最好使用启动任务。你可以做到以下几点:
创建一个Cmmmand批处理文件,该文件将执行:
2.1下载ZIP
2.2解压缩到特定位置的内容
2.3将状态更新回AZure Blob Storage(可选)
在OnStart()函数中,您只需配置ROR
如果您将TCP端点名称“RORWeb80”设置为使用端口80,则代码将如下所示:
TcpListener RoRPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["RORWeb80"].IPEndpoint);
RoRPortListener.Start();
我为Tomcat/Java based worker role编写了一个示例应用程序,它完全相同。所以你可以做到的只是用ROR ZIP替换Tomcat ZIP文件并完全重用代码。
答案 1 :(得分:1)
只要您不需要管理员级访问权限(例如修改注册表,安装msi等),您就可以从OnStart()
进行设置,包括启动脚本。只需在项目中包含启动脚本(不要忘记将Copy Local设置为true)。
启动脚本也是如此:您调用cmd文件,然后为您执行序列。如果你赋予它提升权限,你可以运行安装程序,修改注册表设置,安装自定义性能计数器等等。
在任何一种情况下:您可以在blob存储中保留apache zip,ruby安装程序等,并在启动时将它们下载到本地存储。这样可以避免捆绑部署中的所有内容,从而为您提供一些优势(能够在不重新部署的情况下更新ruby / apache,减小包大小等)。
codeplex上有一个sample app,它演示了通过启动脚本设置Tomcat的基础知识。再举一个例子,您可以查看通过Eclipse Windows Azure Java插件安装的脚本。这些脚本非常相似。关键是要有一些方法从blob存储下载文件然后解压缩它们。我提到的codeplex项目指向一个简单blob下载的示例应用程序。 Eclipse打包在.vbs应用程序中提供类似的功能。这是我基于Eclipse的项目中的一个脚本的片段:
SET SERVER_DIR_NAME=apache-tomcat-7.0.25
SET WAR_NAME=myapp.war
rd "\%ROLENAME%"
mklink /D "\%ROLENAME%" "%ROLEROOT%\approot"
cd /d "\%ROLENAME%"
cscript /NoLogo util\unzip.vbs jre7.zip "%CD%"
cscript /NoLogo util\unzip.vbs tomcat7.zip "%CD%"
copy %WAR_NAME% "%SERVER_DIR_NAME%\webapps\%WAR_NAME%"
cd "%SERVER_DIR_NAME%\bin"
set JAVA_HOME=\%ROLENAME%\jre7
set PATH=%PATH%;%JAVA_HOME%\bin
cmd /c startup.bat
codeplex项目有一个类似的脚本。
不要忘记:您需要为您的角色设置输入端点(角色属性的一部分)。
为了让blob进入blob存储,有两种免费工具(如Clumsy Leaf CloudXplorer和付费工具(如Cerebrata的Cloud Storage Studio)。
要将blob下载到本地存储,您可以编写几行.net代码(来自OnStart)或只使用codeplex项目中指向的实用程序。