【发布时间】:2013-07-17 15:48:47
【问题描述】:
我正在开始一个新的小型企业,如果您愿意的话,我是 POC,我想在某个地方免费部署我的 Rails 应用程序。 我发现有 Heroku,还有其他选择吗?
【问题讨论】:
标签: ruby-on-rails deployment heroku openshift
我正在开始一个新的小型企业,如果您愿意的话,我是 POC,我想在某个地方免费部署我的 Rails 应用程序。 我发现有 Heroku,还有其他选择吗?
【问题讨论】:
标签: ruby-on-rails deployment heroku openshift
这是我在这个主题上找到的一篇非常好的帖子
http://blog.sudobits.com/2013/02/15/heroku-alternatives-for-deploying-rails-applications
我一一浏览了那里的选项,以我的拙见,OpenShift 是中小型网站的最佳选择,至少在开始开发和创建 POC\Prototype 时是这样
为什么更好?
有什么缺点吗?
可能这个文档https://www.openshift.com/blogs/converting-an-existing-rails-app-to-run-on-openshift下的Gemfile部分可以解决这个问题...我稍后试试
我需要执行哪些步骤才能在 Openshift 上部署我现有的应用程序?
我在很多地方都找到了关于如何创建和部署新应用程序的解释,但是有点难以理解如何将我现有的应用程序放到 OpenShift 上
这就是我要解释的原因
假设 - 你的应用程序已经被 git 控制了 - 它的路径是 /home/dev/MyApp - 你现在在 /home/dev 下
rhc domain-create <domain name>
通过运行在 OpenShift 中创建您的应用程序
rhc app-create -a MyApp -t ruby-1.9 --no-git
-a 设置 OpenShift 下的应用程序名称 - 它可以与您的 Rails 应用程序名称完全不同
-t 设置应用程序类型 - 我认为目前 ruby 1.9 是他们支持的最高版本
--no-git 告诉不要创建 git - 因为我们已经有了一个
设置你的数据库
通过调用为您的 OpenShift 应用程序安装适当的数据库盒
rhc cartridge add <DB cartridge type> -a <Application Name>
例如:
rhc cartridge add mysql-5.1 -a MyApp
它还支持 MongoDB 和 PostgreSQL
更改您的 database.yml 以与 OpenShift 数据库相关 - 现在,这非常容易,因为 OpenShift 将其大量配置作为环境变量,您可以在任何需要的地方简单地使用它 - 例如:
production: adapter: mysql encoding: utf8 database: <%=ENV['OPENSHIFT_APP_NAME']%> pool: 5 host: <%=ENV['OPENSHIFT_MYSQL_DB_HOST']%> port: <%=ENV['OPENSHIFT_MYSQL_DB_PORT']%> username: <%=ENV['OPENSHIFT_MYSQL_DB_USERNAME']%> password: <%=ENV['OPENSHIFT_MYSQL_DB_PASSWORD']%> socket: <%=ENV['OPENSHIFT_MYSQL_DB_SOCKET']%>
确保一切都在本地运行
Git - 将 OpenShift 存储库添加为您的远程存储库之一并推送它
rhc app-show <application name> - 这将显示有关您的应用程序的所有信息 - 复制 Git URLgit remote add openshift <OpenShift repo URL>
通过合并获取任何 OpenShift 添加的内容
运行:git merge openshift/master -s recursive -X ours
提交更改:git commit -am 'adding OpenShift files
git push openshift
就是这样,现在您的应用程序应该部署在 OpenShift 上
如何打开我部署的网站?
使用rhc app-show <application name> 命令您可以看到您的网站网址
通常是http://<application name>-<domain name>.rhcloud.com
改成自己的域名很容易
rhc alias add <app name> <your domain>
http://<application name>-<domain name>.rhcloud.com
如何连接到我的 OpenShift 机器?
同样,使用rhc app-show <application name>可以看到SSH地址
只需运行ssh <SSH address> 即可连接
如何在部署时自动运行迁移和种子?
OpenShift 的一个好处是能够添加在部署的不同阶段触发的自定义操作(操作挂钩)
您可以在此处阅读更多信息https://www.openshift.com/developers/deploying-and-building-applications
现在,我只谈部署动作钩子
deploy 的文件chmod +x deploy
把一些代码放进去
例如:
#!/bin/bash
echo "开始部署"
推送 ${OPENSHIFT_REPO_DIR} > /dev/null
echo "将目录更改为 ${OPENSHIFT_REPO_DIR}public"
cd ${OPENSHIFT_REPO_DIR}
cd 公开
echo "创建指向 ${OPENSHIFT_DATA_DIR} 上传命名上传的软链接"
ln -s ${OPENSHIFT_DATA_DIR}上传上传
echo "正在运行 bundle exec rake db:migrate RAILS_ENV=production"
bundle exec rake db:migrate RAILS_ENV="production"
echo "正在运行 bundle exec rake db:seed RAILS_ENV=production"
bundle exec rake db:seed RAILS_ENV="production"
popd > /dev/null
git add deploy(当然是在文件夹中)如何集成 Carrierwave,以便上传文件并保存在 OpenShift 上?
有两点
设置保存路径:
设置initializers\carrierwave.rb文件为
CarrierWave.configure do |config|
if Rails.env.production?
config.storage = :file
config.enable_processing = true
config.root = ENV['OPENSHIFT_DATA_DIR']
config.cache_dir = config.root + 'uploads'
end
end
让上传者保持默认状态,即storage :file
和
定义存储目录
“上传/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}”
结束
$OPENSHIFT_DATA_DIR 文件夹的使用将确保我们能够写入文件并且它会保留在那里
确保路由会找到文件:
我花了一段时间才想出这个技巧(不是太多,只是几个小时)
Rails 路由只知道如何关联应用程序文件夹下的文件夹 - 所以,在 OpenShift 机器上,它会在 ${OPENSHIFT_REPO_DIR}\ public 文件夹,这是我放在 deploy 文件中的软链接变得方便的地方 - 它只是欺骗系统并使其从不在应用程序文件夹下的文件夹中获取这些文件
我知道有很多关于这些问题以及如何部署和所有内容的帖子,但我只是想整理一下。
当然,我写的内容可能存在错误和不准确之处,因为我没有记录每一步,但仅凭我记得的,如果我在某些细节上有错误,请随时纠正我。
最好的来源之一是 OpenShift 文档
我希望这些东西可以帮助人们并节省您的时间和金钱
享受
【讨论】: