1

我有一个 Ruby on Rails 应用程序,它需要在 Azure Worker Role 中找到一个家。

我目前使用批处理文件自动部署应用程序 - 该文件获取 apache 和 ruby​​ 安装程序,运行它们,然后将 RoR 应用程序放在适当的目录中。批处理脚本完成后,Apache 通过端口 80 为应用程序提供服务。

我是 Azure 的新手,并试图弄清楚如何做到这一点。

据我了解,这里有两个选择:使用 Blob 存储中的安装文件启动 OnStart,或启动脚本。我不确定如何执行后者,但我在刚刚创建的新 Azure 项目中的 WorkerRole.vb 文件中找到了 onStart 方法。

我的问题:是否建议使用 OnStart 来部署应用程序(使用批处理脚本)?如果是这样,我将如何将脚本集成到项目中?并且 - 我如何开始在 blob 存储中存储和引用文件?

我知道这些都是超高级的问题。任何输入或建议阅读都会非常有帮助。我试图谷歌/搜索相关资源,但找不到太多。感谢您的时间!

4

2 回答 2

2

当您在 OnStart() 函数中时,最好进行角色配置,例如 IP 绑定等,但是如果您想安装运行时、下载应用程序 zip、配置角色特定设置,最好使用启动任务。请访问我的博客Windows Azure:启动任务或 OnStart(),该选择哪个?了解更多信息。

现在,在您的情况下,最好使用启动任务。您可以执行以下操作:

  1. 将您的 ROR 包创建一个 zip 并将其放在 Windows Azure Blob 存储中
  2. 创建一个 Cmmmand 批处理文件,它将执行以下操作:

    2.1 下载压缩包

    2.2 将内容解压到指定位置

    2.3 将状态更新回 AZure Blob 存储(可选)

  3. 在您的 OnStart() 函数中,您只需要配置 ROR

如果您将 TCP 端点名称“RORWeb80”设置为使用端口 80,则代码将如下所示:

TcpListener RoRPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["RORWeb80"].IPEndpoint);
RoRPortListener.Start();

我已经为基于 Tomcat/Java 的工作角色编写了一个示例应用程序,它的功能完全相同。所以你可以做的只是用 ROR ZIP 替换 Tomcat ZIP 文件并准确地重用代码。

于 2012-06-14T17:34:09.120 回答
1

只要您不需要管理员级别的访问权限(例如修改注册表、安装 msi 等),您就可以从 进行设置OnStart(),包括启动您的脚本。只需将启动脚本包含在您的项目中(不要忘记将 Copy Local 设置为 true)。

启动脚本也是如此:你调用你的 cmd 文件,然后它会为你执行序列。如果你赋予它更高的权限,你可以运行安装程序、修改注册表设置、安装自定义性能计数器等等。

无论哪种情况:您可以将 apache zip、ruby 安装程序等保存在 blob 存储中,并在启动时将它们下载到本地存储。这使您免于在部署中捆绑所有内容,这为您带来了一些优势(能够在不重新部署的情况下更新 ruby​​ / apache、减小包大小等)。

codeplex 上有一个示例应用程序,它演示了通过启动脚本设置 Tomcat 的基础知识。再举一个例子,您可以查看通过 Eclipse Windows Azure plugin for 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 项目中指向的实用程序。

于 2012-06-14T17:22:58.003 回答