obe*_*nda 32 deployment ruby-on-rails heroku openshift
我正在开始一个新的小型企业,如果你愿意的话,我可以在某个地方免费部署我的Rails应用程序.我发现有Heroku,还有其他选择吗?
obe*_*nda 66
这是我在这个主题上找到的一篇非常好的帖子
http://blog.sudobits.com/2013/02/15/heroku-alternatives-for-deploying-rails-applications
我一个接一个地查看了选项,据我所知,OpenShift是中小型网站的最佳选择,至少在开发和创建POC\Prototype之初
为什么更好?
有什么缺点吗?
可能是本文档下的Gemfile部分https://www.openshift.com/blogs/converting-an-existing-rails-app-to-run-on-openshift可以解决这个问题......我会尝试一下后来
为了在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应用程序安装相应的DB盒式磁带
rhc cartridge add <DB cartridge type> -a <Application Name>
例如 :
rhc cartridge add mysql-5.1 -a MyApp
它还支持MongoDB和PostgreSQL
更改您的database.yml以与OpenShift数据库相关 - 现在,这非常简单,因为OpenShift将其大量配置作为环境变量,您可以在任何需要的地方使用它 - 例如:
Run Code Online (Sandbox Code Playgroud)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 action-hook
deploy
它的文件chmod +x deploy
把一些代码放进去
例如:
#!/斌/庆典
echo"开始部署"
pushd $ {OPENSHIFT_REPO_DIR}>/dev/null
echo"将目录更改为$ {OPENSHIFT_REPO_DIR} public"
cd $ {OPENSHIFT_REPO_DIR}
cd public
echo"创建指向$ {OPENSHIFT_DATA_DIR}的软链接上传名为uploads"
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"
捆绑exec rake db:种子RAILS_ENV ="生产"
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
Run Code Online (Sandbox Code Playgroud)
默认情况下保留上传者的意思 storage :file
和
def store_dir
"上传/#{model.class.to_s.underscore} /#{mounted_as}/{#} model.id"
结束
使用$ OPENSHIFT_DATA_DIR文件夹将确保我们能够写入文件并保留在那里
确保路由将找到文件:
我花了一段时间来提出这个伎俩(不是太多,只是几个小时)
Rails路由知道如何仅关联应用程序文件夹下的文件夹 - soo,在OpenShift机器上,它将uploads
在$ {OPENSHIFT_REPO_DIR}\public文件夹下查找上传的文件文件夹(在我们的例子中命名),这是我放在部署文件中的软链接变得很方便 - 它只是欺骗系统并让它去从不在应用程序文件夹下的文件夹中获取这些文件
我知道有很多关于这些问题以及如何部署和所有内容的帖子,但我只想在其中加入一些订单.
当然,在我写的内容中可能存在错误和不准确之处,因为我没有记录每一步,但仅仅记录了我记得的内容,如果我在某些细节上错了,请随时纠正我.
最好的来源之一是OpenShift文档
我希望这些东西可以帮助人们,节省你的时间和金钱
请享用
归档时间: |
|
查看次数: |
15307 次 |
最近记录: |