hyrax 5.0.4 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.dassie/.env +4 -0
- data/.dassie/Gemfile +15 -11
- data/.dassie/app/controllers/application_controller.rb +4 -0
- data/.dassie/app/helpers/hyrax_helper.rb +4 -0
- data/.dassie/app/models/ability.rb +4 -0
- data/.dassie/app/models/user.rb +11 -0
- data/.dassie/app/views/shared/_footer.html.erb +17 -0
- data/.dassie/bin/rails +0 -5
- data/.dassie/bin/rake +0 -5
- data/.dassie/config/application.rb +2 -1
- data/.dassie/config/database.yml +18 -0
- data/.dassie/config/environments/development.rb +1 -1
- data/.dassie/config/environments/production.rb +5 -3
- data/.dassie/config/environments/test.rb +1 -1
- data/.dassie/config/fedora.yml +6 -6
- data/.dassie/config/initializers/profiler.rb +5 -0
- data/.dassie/config/initializers/riiif.rb +20 -18
- data/.dassie/config/locales/hyrax.en.yml +1 -1
- data/.dassie/config/puma.rb +55 -5
- data/.dassie/config/routes.rb +2 -0
- data/.dassie/db/migrate/20250328100249_user_roles.rb +20 -0
- data/.dassie/db/schema.rb +122 -110
- data/.github/workflows/lint-build-test.yml +35 -6
- data/.github/workflows/main.yml +4 -4
- data/.koppie/.env +1 -1
- data/.koppie/Gemfile +13 -10
- data/.koppie/app/controllers/application_controller.rb +4 -0
- data/.koppie/app/helpers/hyrax_helper.rb +4 -0
- data/.koppie/app/models/ability.rb +4 -0
- data/.koppie/app/models/user.rb +10 -0
- data/.koppie/app/views/shared/_footer.html.erb +17 -0
- data/.koppie/bin/rails +0 -5
- data/.koppie/bin/rake +0 -5
- data/.koppie/config/application.rb +2 -1
- data/.koppie/config/database.yml +2 -9
- data/.koppie/config/environments/development.rb +10 -1
- data/.koppie/config/environments/production.rb +5 -3
- data/.koppie/config/environments/test.rb +1 -1
- data/.koppie/config/initializers/1_valkyrie.rb +5 -5
- data/.koppie/config/initializers/hyrax.rb +20 -17
- data/.koppie/config/initializers/profiler.rb +5 -0
- data/.koppie/config/initializers/riiif.rb +21 -18
- data/.koppie/config/locales/hyrax.en.yml +2 -2
- data/.koppie/config/puma.rb +26 -7
- data/.koppie/config/routes.rb +2 -0
- data/.koppie/db/schema.rb +109 -110
- data/Dockerfile +110 -51
- data/app/actors/hyrax/actors/add_to_work_actor.rb +1 -1
- data/app/actors/hyrax/actors/apply_order_actor.rb +1 -1
- data/app/assets/stylesheets/hyrax/_tinymce.scss +6 -0
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +1 -0
- data/app/controllers/hyrax/admin/permission_template_accesses_controller.rb +4 -4
- data/app/controllers/hyrax/api/zotero_controller.rb +1 -1
- data/app/controllers/hyrax/file_sets_controller.rb +11 -0
- data/app/jobs/batch_create_job.rb +2 -2
- data/app/models/admin_set.rb +2 -2
- data/app/models/concerns/hyrax/permissions/writable.rb +1 -2
- data/app/models/concerns/hyrax/valkyrie_lazy_migration.rb +1 -0
- data/app/models/hyrax/collection_type.rb +4 -4
- data/app/models/single_use_link.rb +1 -1
- data/app/services/hyrax/listeners.rb +1 -0
- data/app/services/hyrax/statistics/term_query.rb +1 -1
- data/app/services/hyrax/user_stat_importer.rb +1 -1
- data/app/services/hyrax/workflow.rb +8 -0
- data/app/validators/hyrax/has_one_title_validator.rb +1 -1
- data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +1 -1
- data/bin/db-migrate-seed.sh +1 -1
- data/bin/dev-entrypoint.sh +3 -0
- data/config/initializers/1_healthz.rb +2 -1
- data/config/initializers/ar_test_fixture_monkey_patch.rb +8 -0
- data/config/initializers/arel_rails_7_2_monkey_patch.rb +6 -0
- data/config/initializers/listeners.rb +4 -2
- data/config/initializers/new_framework_defaults_7_2.rb +8 -0
- data/docker-compose-dassie.yml +2 -2
- data/docker-compose-koppie.yml +2 -2
- data/docker-compose-sirenia.yml +3 -3
- data/documentation/developing-your-hyrax-based-app.md +6 -6
- data/hyrax.gemspec +9 -9
- data/lib/generators/hyrax/config_generator.rb +0 -5
- data/lib/generators/hyrax/install_generator.rb +1 -6
- data/lib/generators/hyrax/templates/.env +1 -1
- data/lib/generators/hyrax/templates/config/initializers/1_valkyrie.rb +21 -19
- data/lib/generators/hyrax/templates/config/initializers/riiif.rb +21 -19
- data/lib/generators/hyrax/templates/db/migrate/20170131142607_add_permission_template_to_sipity_workflow.rb.erb +1 -1
- data/lib/generators/hyrax/templates/db/migrate/20170810190549_update_collection_type_column_options.rb.erb +1 -1
- data/lib/generators/hyrax/templates/db/migrate/20230821153635_add_fields_to_counter_metric.rb.erb +1 -1
- data/lib/hyrax/configuration.rb +1 -0
- data/lib/hyrax/controlled_vocabulary/importer/language.rb +1 -1
- data/lib/hyrax/engine.rb +15 -10
- data/lib/hyrax/version.rb +1 -1
- data/lib/hyrax.rb +4 -0
- data/lib/tasks/workflow.rake +1 -2
- data/template.rb +6 -1
- metadata +49 -44
- data/.dassie/bin/spring +0 -17
- data/.dassie/config/initializers/mini_magick.rb +0 -6
- data/.dassie/config/spring.rb +0 -6
- data/.koppie/bin/spring +0 -17
- data/.koppie/config/initializers/mini_magick.rb +0 -6
- data/.koppie/config/spring.rb +0 -6
- data/config/initializers/reform_rails_6_1_monkey_patch.rb +0 -27
- data/lib/generators/hyrax/templates/config/initializers/mini_magick.rb +0 -6
data/hyrax.gemspec
CHANGED
@@ -32,13 +32,13 @@ SUMMARY
|
|
32
32
|
# NOTE: rails does not follow sem-ver conventions, it's
|
33
33
|
# minor version releases can include breaking changes; see
|
34
34
|
# http://guides.rubyonrails.org/maintenance_policy.html
|
35
|
-
spec.add_dependency 'rails', '~>
|
35
|
+
spec.add_dependency 'rails', '~> 7.2', '< 8.0'
|
36
36
|
|
37
|
-
spec.add_dependency 'active-fedora', '~>
|
37
|
+
spec.add_dependency 'active-fedora', '~> 15.0'
|
38
38
|
spec.add_dependency 'almond-rails', '~> 0.1'
|
39
39
|
spec.add_dependency 'awesome_nested_set', '~> 3.1'
|
40
40
|
spec.add_dependency 'blacklight', '~> 7.29'
|
41
|
-
spec.add_dependency 'blacklight-gallery', '~> 4.
|
41
|
+
spec.add_dependency 'blacklight-gallery', '~> 4.6.4'
|
42
42
|
spec.add_dependency 'breadcrumbs_on_rails', '~> 3.0'
|
43
43
|
spec.add_dependency 'browse-everything', '>= 0.16', '< 2.0'
|
44
44
|
spec.add_dependency 'carrierwave', '~> 1.0'
|
@@ -56,22 +56,22 @@ SUMMARY
|
|
56
56
|
spec.add_dependency 'flot-rails', '~> 0.0.6'
|
57
57
|
spec.add_dependency 'font-awesome-rails', '~> 4.2'
|
58
58
|
spec.add_dependency 'google-analytics-data', '~> 0.6'
|
59
|
-
spec.add_dependency 'hydra-derivatives', '~>
|
60
|
-
spec.add_dependency 'hydra-editor', '~>
|
59
|
+
spec.add_dependency 'hydra-derivatives', '~> 4.0'
|
60
|
+
spec.add_dependency 'hydra-editor', '~> 7.0'
|
61
61
|
spec.add_dependency 'hydra-file_characterization', '~> 1.1'
|
62
|
-
spec.add_dependency 'hydra-head', '~>
|
62
|
+
spec.add_dependency 'hydra-head', '~> 13.0'
|
63
63
|
spec.add_dependency 'hydra-works', '>= 0.16'
|
64
64
|
spec.add_dependency 'iiif_manifest', '>= 0.3', '< 2.0'
|
65
65
|
spec.add_dependency 'json-schema' # for Arkivo
|
66
66
|
spec.add_dependency 'legato', '~> 0.3'
|
67
67
|
spec.add_dependency 'linkeddata' # Required for getting values from geonames
|
68
|
+
spec.add_dependency 'listen', '~> 3.9'
|
68
69
|
spec.add_dependency 'mailboxer', '~> 0.12'
|
69
70
|
spec.add_dependency 'nest', '~> 3.1'
|
70
71
|
spec.add_dependency 'noid-rails', '~> 3.0'
|
71
72
|
spec.add_dependency 'oauth'
|
72
73
|
spec.add_dependency 'oauth2', '~> 1.2'
|
73
74
|
spec.add_dependency 'openseadragon', '~> 0.9'
|
74
|
-
spec.add_dependency 'posix-spawn'
|
75
75
|
spec.add_dependency 'qa', '~> 5.5', '>= 5.5.1' # questioning_authority
|
76
76
|
spec.add_dependency 'rails_autolink', '~> 1.1'
|
77
77
|
spec.add_dependency 'rdf-rdfxml' # controlled vocabulary importer
|
@@ -92,7 +92,7 @@ SUMMARY
|
|
92
92
|
|
93
93
|
spec.add_development_dependency "capybara", '~> 3.29'
|
94
94
|
spec.add_development_dependency 'capybara-screenshot', '~> 1.0'
|
95
|
-
spec.add_development_dependency 'database_cleaner', '
|
95
|
+
spec.add_development_dependency 'database_cleaner', '>= 1.3'
|
96
96
|
spec.add_development_dependency "equivalent-xml", '~> 0.5'
|
97
97
|
spec.add_development_dependency "factory_bot", '~> 4.4'
|
98
98
|
spec.add_development_dependency 'mida', '~> 0.3'
|
@@ -100,7 +100,7 @@ SUMMARY
|
|
100
100
|
spec.add_development_dependency 'pg', '~> 1.2'
|
101
101
|
spec.add_development_dependency 'rspec-activemodel-mocks', '~> 1.0'
|
102
102
|
spec.add_development_dependency 'rspec-its', '~> 1.1'
|
103
|
-
spec.add_development_dependency 'rspec-rails', '~>
|
103
|
+
spec.add_development_dependency 'rspec-rails', '~> 7.0'
|
104
104
|
spec.add_development_dependency 'rspec_junit_formatter'
|
105
105
|
spec.add_development_dependency "selenium-webdriver", '~> 4.4'
|
106
106
|
spec.add_development_dependency 'i18n-debug'
|
@@ -59,11 +59,6 @@ class Hyrax::ConfigGenerator < Rails::Generators::Base
|
|
59
59
|
copy_file 'config/initializers/hyrax.rb'
|
60
60
|
end
|
61
61
|
|
62
|
-
# Add mini-magick configuration
|
63
|
-
def minimagick_config
|
64
|
-
copy_file 'config/initializers/mini_magick.rb'
|
65
|
-
end
|
66
|
-
|
67
62
|
def tinymce_config
|
68
63
|
copy_file 'config/tinymce.yml'
|
69
64
|
end
|
@@ -188,7 +188,7 @@ module Hyrax
|
|
188
188
|
generate 'hyrax:riiif' unless options[:'skip-riiif']
|
189
189
|
end
|
190
190
|
|
191
|
-
def
|
191
|
+
def insert_application_config
|
192
192
|
insert_into_file 'config/application.rb', after: /config\.load_defaults [0-9.]+$/ do
|
193
193
|
"\n config.active_job.queue_adapter = ENV.fetch('HYRAX_ACTIVE_JOB_QUEUE') { 'async' }.to_sym\n"
|
194
194
|
end
|
@@ -209,10 +209,5 @@ module Hyrax
|
|
209
209
|
gem 'dotenv-rails', '~> 2.8'
|
210
210
|
end
|
211
211
|
end
|
212
|
-
|
213
|
-
def support_analytics
|
214
|
-
gem 'google-protobuf', force_ruby_platform: true # required because google-protobuf is not compatible with Alpine linux
|
215
|
-
gem 'grpc', force_ruby_platform: true # required because grpc is not compatible with Alpine linux
|
216
|
-
end
|
217
212
|
end
|
218
213
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
CH12N_TOOL=fits_servlet
|
2
2
|
DATABASE_URL=postgresql://postgres@localhost:5437/hyrax-dev?pool=5
|
3
|
-
|
3
|
+
FEDORA_URL=http://fedoraAdmin:fedoraAdmin@localhost:8989/fcrepo/rest
|
4
4
|
FITS_SERVLET_URL=http://localhost:8085/fits
|
5
5
|
HYRAX_ACTIVE_JOB_QUEUE=async
|
6
6
|
REDIS_URL=redis://localhost:6384
|
@@ -32,7 +32,7 @@ Valkyrie::MetadataAdapter.register(
|
|
32
32
|
# Valkyrie::MetadataAdapter.register(
|
33
33
|
# Valkyrie::Persistence::Fedora::MetadataAdapter.new(
|
34
34
|
# connection: ::Ldp::Client.new(Hyrax.config.fedora_connection_builder.call(
|
35
|
-
# ENV.fetch('
|
35
|
+
# ENV.fetch('FEDORA_URL') { "http://localhost:8080/fcrepo/rest" }
|
36
36
|
# )),
|
37
37
|
# base_path: Rails.env,
|
38
38
|
# schema: Valkyrie::Persistence::Fedora::PermissiveSchema.new(Hyrax::SimpleSchemaLoader.new.permissive_schema_for_valkrie_adapter),
|
@@ -67,7 +67,7 @@ Valkyrie.config.metadata_adapter = ENV.fetch('VALKYRIE_METADATA_ADAPTER') { :pg_
|
|
67
67
|
# Valkyrie::StorageAdapter.register(
|
68
68
|
# Valkyrie::Storage::Fedora.new(
|
69
69
|
# connection: ::Ldp::Client.new(Hyrax.config.fedora_connection_builder.call(
|
70
|
-
# ENV.fetch('
|
70
|
+
# ENV.fetch('FEDORA_URL') { "http://localhost:8080/fcrepo/rest" }
|
71
71
|
# )),
|
72
72
|
# base_path: Rails.env,
|
73
73
|
# fedora_version: 6.5,
|
@@ -86,21 +86,23 @@ Valkyrie.config.storage_adapter = ENV.fetch('VALKYRIE_STORAGE_ADAPTER') { :vers
|
|
86
86
|
|
87
87
|
Valkyrie.config.indexing_adapter = :solr_index
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
89
|
+
Rails.application.reloader.to_prepare do
|
90
|
+
custom_queries = [Hyrax::CustomQueries::Navigators::CollectionMembers,
|
91
|
+
Hyrax::CustomQueries::Navigators::ChildCollectionsNavigator,
|
92
|
+
Hyrax::CustomQueries::Navigators::ParentCollectionsNavigator,
|
93
|
+
Hyrax::CustomQueries::Navigators::ChildFileSetsNavigator,
|
94
|
+
Hyrax::CustomQueries::Navigators::ChildWorksNavigator,
|
95
|
+
Hyrax::CustomQueries::Navigators::ParentWorkNavigator,
|
96
|
+
Hyrax::CustomQueries::Navigators::FindFiles,
|
97
|
+
Hyrax::CustomQueries::FindAccessControl,
|
98
|
+
Hyrax::CustomQueries::FindCollectionsByType,
|
99
|
+
Hyrax::CustomQueries::FindFileMetadata,
|
100
|
+
Hyrax::CustomQueries::FindIdsByModel,
|
101
|
+
Hyrax::CustomQueries::FindManyByAlternateIds,
|
102
|
+
Hyrax::CustomQueries::FindModelsByAccess,
|
103
|
+
Hyrax::CustomQueries::FindCountBy,
|
104
|
+
Hyrax::CustomQueries::FindByDateRange]
|
105
|
+
custom_queries.each do |handler|
|
106
|
+
Hyrax.query_service.custom_queries.register_query_handler(handler)
|
107
|
+
end
|
106
108
|
end
|
@@ -29,35 +29,37 @@ Rails.application.reloader.to_prepare do
|
|
29
29
|
Riiif.not_found_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
|
30
30
|
Riiif.unauthorized_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
|
31
31
|
|
32
|
-
Riiif::Engine.config.cache_duration = 1.
|
32
|
+
Riiif::Engine.config.cache_duration = 1.day
|
33
33
|
end
|
34
34
|
|
35
35
|
module Hyrax
|
36
36
|
# Adds file locking to Riiif::File
|
37
37
|
# @see RiiifFileResolver
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
Rails.application.reloader.to_prepare do
|
39
|
+
class RiiifFile < Riiif::File
|
40
|
+
include ActiveSupport::Benchmarkable
|
41
|
+
|
42
|
+
attr_reader :id
|
43
|
+
def initialize(input_path, tempfile = nil, id:)
|
44
|
+
super(input_path, tempfile)
|
45
|
+
raise(ArgumentError, "must specify id") if id.blank?
|
46
|
+
@id = id
|
47
|
+
end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
# Wrap extract in a read lock and benchmark it
|
50
|
+
def extract(transformation, image_info = nil)
|
51
|
+
Riiif::Image.file_resolver.file_locks[id].with_read_lock do
|
52
|
+
benchmark "RiiifFile extracted #{path} with #{transformation.to_params}", level: :debug do
|
53
|
+
super
|
54
|
+
end
|
53
55
|
end
|
54
56
|
end
|
55
|
-
end
|
56
57
|
|
57
|
-
|
58
|
+
private
|
58
59
|
|
59
|
-
|
60
|
-
|
60
|
+
def logger
|
61
|
+
Hyrax.logger
|
62
|
+
end
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddPermissionTemplateToSipityWorkflow < ActiveRecord::Migration
|
1
|
+
class AddPermissionTemplateToSipityWorkflow < ActiveRecord::Migration[6.1]
|
2
2
|
def change
|
3
3
|
add_column :sipity_workflows, :permission_template_id, :integer, index: true
|
4
4
|
remove_index :sipity_workflows, :name
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class UpdateCollectionTypeColumnOptions < ActiveRecord::Migration
|
1
|
+
class UpdateCollectionTypeColumnOptions < ActiveRecord::Migration[6.1]
|
2
2
|
def up
|
3
3
|
change_column :hyrax_collection_types, :title, :string, unique: true
|
4
4
|
change_column :hyrax_collection_types, :machine_id, :string, unique: true
|
data/lib/generators/hyrax/templates/db/migrate/20230821153635_add_fields_to_counter_metric.rb.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddFieldsToCounterMetric < ActiveRecord::Migration
|
1
|
+
class AddFieldsToCounterMetric < ActiveRecord::Migration[6.1]
|
2
2
|
def change
|
3
3
|
add_column :hyrax_counter_metrics, :title, :string
|
4
4
|
add_column :hyrax_counter_metrics, :year_of_publication, :integer, index: true
|
data/lib/hyrax/configuration.rb
CHANGED
@@ -13,7 +13,7 @@ module Hyrax
|
|
13
13
|
stdout_logger.formatter = proc do |_severity, _datetime, _progname, msg|
|
14
14
|
"#{msg}\n"
|
15
15
|
end
|
16
|
-
|
16
|
+
ActiveSupport::BroadcastLogger.new(Hyrax.logger, stdout_logger)
|
17
17
|
end
|
18
18
|
|
19
19
|
def import
|
data/lib/hyrax/engine.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Hyrax
|
3
|
-
class Engine < ::Rails::Engine
|
3
|
+
class Engine < ::Rails::Engine # rubocop:disable Metrics/ClassLength
|
4
4
|
isolate_namespace Hyrax
|
5
5
|
|
6
6
|
require 'almond-rails'
|
@@ -60,12 +60,15 @@ module Hyrax
|
|
60
60
|
# raises PG::ConnectionBad. There's no good common ancestor to assume. That's why this test
|
61
61
|
# is in its own tiny chunk of code – so we know that whatever the StandardError is, it's coming
|
62
62
|
# from the attempt to connect.
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
63
|
+
#
|
64
|
+
# (Some time later...) Simply accessing the connection obj is not raising PG::ConnectionBad,
|
65
|
+
# so let's call active? too.
|
66
|
+
can_connect =
|
67
|
+
begin
|
68
|
+
ActiveRecord::Base.connection.active?
|
69
|
+
rescue StandardError
|
70
|
+
false
|
71
|
+
end
|
69
72
|
|
70
73
|
can_persist = can_connect && begin
|
71
74
|
Hyrax.config.persist_registered_roles!
|
@@ -88,9 +91,11 @@ module Hyrax
|
|
88
91
|
end
|
89
92
|
|
90
93
|
initializer 'requires' do
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
+
ActiveSupport::Reloader.to_prepare do
|
95
|
+
require 'wings' unless Hyrax.config.disable_wings
|
96
|
+
require 'freyja' unless Hyrax.config.disable_freyja
|
97
|
+
require 'frigg' unless Hyrax.config.disable_frigg
|
98
|
+
end
|
94
99
|
end
|
95
100
|
|
96
101
|
initializer 'routing' do
|
data/lib/hyrax/version.rb
CHANGED
data/lib/hyrax.rb
CHANGED
data/lib/tasks/workflow.rake
CHANGED
@@ -3,8 +3,7 @@ namespace :hyrax do
|
|
3
3
|
namespace :workflow do
|
4
4
|
desc "Load workflow configuration into the database"
|
5
5
|
task load: :environment do
|
6
|
-
logger = Logger.new(STDOUT)
|
7
|
-
logger.level = Logger::DEBUG
|
6
|
+
logger = Hyrax.logger || Logger.new(STDOUT, level: Logger::DEBUG)
|
8
7
|
Hyrax::Workflow::WorkflowImporter.load_workflows(logger: logger)
|
9
8
|
errors = Hyrax::Workflow::WorkflowImporter.load_errors
|
10
9
|
abort("Failed to process all workflows:\n #{errors.join('\n ')}") unless errors.empty?
|
data/template.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
insert_into_file 'config/application.rb', after: /config\.load_defaults [0-9.]+$/ do
|
4
|
+
"\n config.add_autoload_paths_to_load_path = true"
|
5
|
+
end
|
6
|
+
|
7
|
+
gem 'hyrax', '5.1.0'
|
3
8
|
run 'bundle install'
|
4
9
|
generate 'hyrax:install', '-f'
|