How to force install a package in OpenShift Online when my RAILS_ENV is configured for development?

I have a Rails application in OpenShift Online that I am trying to configure using RAILS_ENV = development , and not the default production . The idea that will come later, I will add test, intermediate and production domains.

My problem is that since env is installed in development , the OpenShift process, which starts when I click git, says that it skips installing the package:

remote: NOTE: Skipping 'bundle install' because running in development mode. 

I got it to install the package by setting RAILS_ENV for production temporarily .

Is there a way to force a package to be installed in an OpenShift Online environment while working in development mode ?

UPDATE:

I tried to force the installation of the package through .openshift / action_hooks / pre_build. Getting Gemfile syntax error during pre_build hook. Gemfile works locally and on OpenShift when using RAILS_ENV = production.

Gemfile

 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_hooks / pre_build

 #!/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 


Exit "git push" to the OpenShift Online app

 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 
0
source share
2 answers

I was able to get the package installed using RAILS_ENV = development by doing two things:

  • Modified pre_build action hook to install the package with the correct Ruby version and environment context.
  • Force_clean_build marker added

NOTE. My application was created using the quick launch of Rails 4 (4.1.4) and Ruby 2.0 .

What I tried above, after the suggestion to add "bundle install" to the action key (it turns out that pre_build is correct for the change), was fine, except for the execution:

package install --path./vendor/bundle

results in a strange gemfile syntax error in 'sdoc'.

I noticed that the deployment of the action hook included code for the source of several files to set the ruby ​​version and execution context. And also executed "bundle" as:

 ruby_with_nodejs_context "bundle exec rake db:migrate" 

After adding the “correct” execution context (see below), the Gemfile syntax error disappeared. Finally, I had to add a force_clean_build token, because without it I was getting errors:

 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_hooks / pre_build

 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
source

You can configure the action hook to start the installation of the package. Try this article: https://www.openshift.com/developers/deploying-and-building-applications see the section "Customizing the OpenShift Build Process".

0
source

Source: https://habr.com/ru/post/982059/


All Articles