首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的OpenShift被设置为开发时,如何在RAILS_ENV联机上强制进行捆绑安装?

当我的OpenShift被设置为开发时,如何在RAILS_ENV联机上强制进行捆绑安装?
EN

Stack Overflow用户
提问于 2014-09-02 14:09:05
回答 2查看 2.7K关注 0票数 0

我在OpenShift Online上有一个Rails应用程序,我正在尝试用OpenShift安装它,而不是production的默认env。稍后我将添加测试、暂存和生产域。

我的问题是,因为env被设置为development,所以当我执行git推时运行的OpenShift进程说它跳过了“包安装”:

代码语言:javascript
复制
remote: NOTE: Skipping 'bundle install' because running in development mode.

我通过将RAILS_ENV设置为生产临时来完成包安装。

在运行在开发模式中的OpenShift联机环境中,是否有一种方法强制捆绑安装?

更新:

尝试通过..openshift/action_hooks/pre强制进行包安装。在钩子期间获取Gemfile语法错误。当使用OpenShift = RAILS_ENV时,Gemfile在本地和在RAILS_ENV上工作。

Gemfile

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'rails', '4.1.4'

### OpenShift Online changes:

# Fix the conflict with the system 'rake':
gem 'rake', '~> 0.9.6'

# Iron.io gems
gem 'iron_mq'
#gem 'iron_worker_ng'

# Support for databases and environment.
# Use 'sqlite3' for testing and development and mysql and postgresql
# for production.
#
# To speed up the 'git push' process you can exclude gems from bundle install:
# For example, if you use rails + mysql, you can:
#
# $ rhc env set BUNDLE_WITHOUT="development test postgresql"
#

group :test do
  gem 'sqlite3'
  gem 'minitest'
end

group :development, :test do
  gem 'thor'
end

# Add support for the MySQL
group :development, :production, :mysql do
  gem 'mysql2'
end

### / OpenShift changes

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

..openshift/action_钩子/预生成

代码语言:javascript
复制
#!/bin/bash
# This is a simple script and will be executed on your CI system if
# available.  Otherwise it will execute while your application is stopped
# before the build step.  This script gets executed directly, so it
# could be python, php, ruby, etc.

if [[ "$RUBY_VERSION" == "1.8" ]]; then
  echo "ERROR: This quickstart is not compatible with Ruby 1.8"
  echo "ERROR: Please use ruby-1.9 or ruby-2.0 application type."
  exit 1
fi

if [[ "$RAILS_ENV" == "development" ]]
then
  echo "Forcing bundle install for environment: $RAILS_ENV"

  pushd $OPENSHIFT_HOMEDIR/app-root/repo > /dev/null
  bundle install --path ./vendor/bundle
  popd > /dev/null
fi

从"git push“输出到OpenShift在线应用程序

代码语言:javascript
复制
remote: Stopping MySQL 5.5 cartridge
remote: Ruby cartridge in development mode, skipping stop...
remote: Force clean build enabled - cleaning dependencies
remote: Building git ref 'master', commit 5c3182d
remote: Forcing bundle install for environment: development
remote: Gemfile syntax error:
remote: /var/lib/openshift/540306395973ca6dc30006bc/app-root/runtime/repo/Gemfile:56:
remote: syntax error, unexpected ':', expecting $end
remote: gem 'sdoc', '~> 0.4.0',          group: :doc
remote:                                        ^
remote: Building Ruby cartridge
remote: NOTE: Skipping 'bundle install' because running in development mode.
remote: Preparing build for deployment
remote: Deployment id is a65ea3ad
remote: Activating deployment
remote: Starting MySQL 5.5 cartridge
remote: NOTE: The 'rake assets:precompile' is disabled when Ruby is in development mode.
remote: bundle exec rake db:migrate RAILS_ENV=development
remote: /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find rake-0.9.6 in any of the sources (Bundler::GemNotFound)
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/spec_set.rb:85:in `map!'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/spec_set.rb:85:in `materialize'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/definition.rb:114:in `specs'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/definition.rb:159:in `specs_for'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/definition.rb:148:in `requested_specs'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/environment.rb:18:in `requested_specs'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/runtime.rb:13:in `setup'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler.rb:120:in `setup'
remote:     from /opt/rh/ror40/root/usr/share/gems/gems/bundler-1.3.5/lib/bundler/setup.rb:17:in `<top (required)>'
remote:     from /opt/rh/ruby200/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:53:in `require'
remote:     from /opt/rh/ruby200/root/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:53:in `require'
remote: -------------------------
remote: Git Post-Receive Result: failure
remote: Activation status: failure
remote: Activation failed for the following gears:
remote: 540306395973ca6dc30006bc (Error activating gear: CLIENT_ERROR: Failed to execute action hook 'deploy' for 540306395973ca6dc30006bc application pvcentral)
remote: Deployment completed with status: failure
remote: postreceive failed
To ssh://540306395973ca6dc30006bc@pvcentral-pervasivdev.rhcloud.com/~/git/pvcentral.git/
   8d74e27..5c3182d  master -> master
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-07 20:41:47

通过执行以下两项操作,我能够使用RAILS_ENV=development强制进行捆绑安装:

  1. 修改pre_build操作钩子以使用正确版本的ruby和环境上下文执行“包安装”
  2. 添加了force_clean_build标记

注意:我的应用程序是使用Rails 4 (4.1.4)和Ruby2.0快速启动创建的。

在建议将"bundle install“添加到操作钩子(原来pre_build是要修改的正确方法)之后,我尝试了什么,除了执行如下:

包安装--路径./供应商/包

结果在“sdoc”上出现了一个奇怪的Gemfile语法错误。

我注意到,deploy操作钩子包含了一些代码,用于提供几个文件来设置ruby版本和执行上下文。并将"bundle“执行为:

代码语言:javascript
复制
ruby_with_nodejs_context "bundle exec rake db:migrate"

在添加“右”执行上下文(参见下面)之后,Gemfile语法错误消失了。最后,我不得不添加force_clean_build标记,因为没有它我就会得到错误:

代码语言:javascript
复制
remote: Building Ruby cartridge
remote: Restoring previously bundled RubyGems
remote: NOTE: You can commit .openshift/markers/force_clean_build to force a clean bundle
remote: ERROR: You need to remove the ".bundle" directory from your GIT repository.
remote: An error occurred executing 'gear postreceive' (exit code: 1)
remote: Error message: CLIENT_ERROR: Failed to execute: 'control build' for /var/lib/openshift/54077e9a5973ca2e6900096f/ruby

..openshift/action_钩子/预生成

代码语言:javascript
复制
source $OPENSHIFT_CARTRIDGE_SDK_BASH
source ${OPENSHIFT_RUBY_DIR}/lib/ruby_context

pushd ${OPENSHIFT_REPO_DIR} >/dev/null
if [[ -f .openshift/markers/force_clean_build && "$RAILS_ENV" == "development" ]]
then
  echo "bundle install --path ./vendor/bundle"
  ruby_with_nodejs_context "bundle install --path ./vendor/bundle"
fi
popd > /dev/null
票数 1
EN

Stack Overflow用户

发布于 2014-09-02 16:26:56

您可以设置一个操作钩子来运行捆绑安装。尝试本文:https://www.openshift.com/developers/deploying-and-building-applications查看定制OpenShift的构建过程部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25625466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档