Elastic Beanstalk - 使用 Github Gems 部署 Rails
Posted
技术标签:
【中文标题】Elastic Beanstalk - 使用 Github Gems 部署 Rails【英文标题】:Elastic Beanstalk - Rails Deploy using Github Gems 【发布时间】:2013-08-31 21:35:25 【问题描述】:我已经阅读了一些关于 SO 讨论在 GemFile 中使用 :git
的其他线程,但这些解决方案似乎对我不起作用。
这是我的 .ebextensions/ruby.config 文件:
option_settings:
- option_name: BUNDLE_DISABLE_SHARED_GEMS
value: "1"
- option_name: BUNDLE_PATH
value: "vendor/bundle"
packages:
yum:
git: []
container_commands:
01bundle:
command: bundle --deployment
这是我在 GemFile 中使用 Github 的一个地方:
gem 'themes_for_rails', :git => 'https://github.com/digitalmoksha/themes_for_rails.git'
最后,我在 production.log 中遇到的与此 gem 不存在相关的错误:
I, [2013-08-28T13:29:26.979524 #26738] INFO -- : Start adding themes to assets [true]
I, [2013-08-28T13:30:36.528844 #26808] INFO -- : Start adding themes to assets [true]
I, [2013-08-28T13:32:47.069202 #26901] INFO -- : Start adding themes to assets [true]
I, [2013-08-28T13:32:48.254604 #26913] INFO -- : Started GET "/" for 123.456.789.10 at 2013-08-28 13:32:48 +0000
I, [2013-08-28T13:32:48.299025 #26913] INFO -- : Processing by StaticController#index as html
I, [2013-08-28T13:32:48.323622 #26913] INFO -- : Rendered static/index.html.erb within layouts/application (0.7ms)
I, [2013-08-28T13:32:48.331925 #26913] INFO -- : Completed 500 Internal Server Error in 32ms
F, [2013-08-28T13:32:48.334631 #26913] FATAL -- :
ActionView::Template::Error (undefined method `base_theme_stylesheet_path' for #<StaticController:0x00000003e16a10>):
3: <head>
4: <title>Boundless</title>
5: <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
6: <%= stylesheet_link_tag current_theme_stylesheet_path('application'), media: "all", "data-turbolinks-track" => true %>
7: <%= javascript_include_tag "application", "data-turbolinks-track" => true %>
8: <%= javascript_include_tag current_theme_javascript_path('application'), "data-turbolinks-track" => true %>
9: <%= csrf_meta_tags %>
app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb__2276887207485791953_34113280'
但是,我可以清楚地看到 gem 打包在 /var/log/eb-tools.log 中
Using themes_for_rails (0.5.2) from https://github.com/digitalmoksha/themes_for_rails.git (at master)
Using turbolinks (1.3.0)
Using uglifier (2.2.0)
Your bundle is complete! It was installed into ./vendor/bundle
这是我的完整日志文件快照:https://gist.github.com/holtkampw/255d7bb00407fc615c76
关于我可以做些什么来使其正常工作有什么想法吗?也许我的 .ebextensions 文件不正确?
【问题讨论】:
【参考方案1】:我在使用活动管理员时遇到了同样的问题。您可以将 gem 放入您的供应商文件夹中。为我工作。
把它放在你的 gem 文件中:
gem 'themes_for_rails', path: 'vendor/themes_for_rails', require: 'themes_for_rails'
您需要将此代码维护到您的 /.ebextensions/ruby.config 文件中:
option_settings:
- option_name: BUNDLE_DISABLE_SHARED_GEMS
value: "1"
- option_name: BUNDLE_PATH
value: "vendor/bundle"
不要忘记将 gem 的 git 内容提取到 vendor/themes_for_rails 文件夹中。
【讨论】:
【参考方案2】:This gist 将使它的行为与您对大多数 Rails 环境的期望一样。当我遇到来自 git repo 的 gem 的相同问题时,我开始在我们的部署中使用它。
根据我的理解(至少我记得),基本原理是 git 位置是一个不受信任的来源,并且可能会在添加/回收实例时损害或使您的部署不稳定/不可重现。虽然我同意,但我仍然希望可以在需要时使用它们。
【讨论】:
这是一个非常有用的起点。通过一些 container_commands,我能够解决我的问题。以上是关于Elastic Beanstalk - 使用 Github Gems 部署 Rails的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cloudflare 将 HTTPs 添加到 Elastic Beanstalk
如何使用 Terraform 为 Elastic Beanstalk 环境定义条件(每个环境)设置?
Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本