RedmineをJRubyで動かす¶
挑戦中 |
Windows OSでJRuby上でRedmineを動かす¶
準備編¶
jrubyのインストール¶
インストール手順は略。
環境変数PATHはJRubyのコマンドを実行できるよう設定しています(インストーラーで自動的に設定)。
bundler gemのインストール¶
C:\work\redmine> jruby -S gem install bundler --no-rdoc --no-ri Fetching: bundler-1.16.3.gem (100%) Successfully installed bundler-1.16.3 1 gem installed C:\work\redmine>
bundlerは、システムにインストールする必要があります。JRubyであればJRuby配下のディレクトリにインストールされます。
例)C:\jruby-9.2.0.0\lib\ruby\gems\shared\gems\bundler-1.16.3
Redmineに必要なgemのインストール¶
Redmineアプリケーション専用にgemをインストールします。
C:\work\redmine> bundle install --path vendor/bundler The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for x86-mingw32, x64-mingw32, x86-mswin32. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x64-mingw32 x86-mswin32`. The dependency rmagick (>= 2.14.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. The dependency redcarpet (~> 3.4.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. The dependency sqlite3 (~> 1.3.12) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/. Resolving dependencies............. Unable to find a spec satisfying tzinfo-data (>= 0) in the set. Perhaps the lockfile is corrupted? C:\work\redmine>
Redmineで配布されるGemfileでtzinfo-dataを指定している個所を調べると次の記述となっていました。
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
これを次の様に修正
- gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
+ gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin, :jruby]
すると
C:\work\redmine> bundle install --path vendor/bundler The dependency rmagick (>= 2.14.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. The dependency redcarpet (~> 3.4.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. The dependency sqlite3 (~> 1.3.12) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/. Resolving dependencies............. Fetching rake 12.3.1 Installing rake 12.3.1 Fetching concurrent-ruby 1.0.5 (java) Installing concurrent-ruby 1.0.5 (java) Fetching i18n 0.7.0 Installing i18n 0.7.0 Fetching minitest 5.11.3 Installing minitest 5.11.3 Fetching thread_safe 0.3.6 (java) Installing thread_safe 0.3.6 (java) Fetching tzinfo 1.2.5 Installing tzinfo 1.2.5 Fetching activesupport 5.2.1 Installing activesupport 5.2.1 Fetching builder 3.2.3 Installing builder 3.2.3 Fetching erubi 1.7.1 Installing erubi 1.7.1 Fetching nokogiri 1.8.4 (java) Installing nokogiri 1.8.4 (java) Fetching rails-dom-testing 2.0.3 Installing rails-dom-testing 2.0.3 Fetching crass 1.0.4 Installing crass 1.0.4 Fetching loofah 2.2.2 Installing loofah 2.2.2 Fetching rails-html-sanitizer 1.0.4 Installing rails-html-sanitizer 1.0.4 Fetching actionview 5.2.1 Installing actionview 5.2.1 Fetching rack 2.0.5 Installing rack 2.0.5 Fetching rack-test 1.1.0 Installing rack-test 1.1.0 Fetching actionpack 5.2.1 Installing actionpack 5.2.1 Fetching nio4r 2.3.1 (java) Installing nio4r 2.3.1 (java) Fetching websocket-extensions 0.1.3 Installing websocket-extensions 0.1.3 Fetching websocket-driver 0.7.0 (java) Installing websocket-driver 0.7.0 (java) Fetching actioncable 5.2.1 Installing actioncable 5.2.1 Fetching globalid 0.4.1 Installing globalid 0.4.1 Fetching activejob 5.2.1 Installing activejob 5.2.1 Fetching mime-types-data 3.2016.0521 Installing mime-types-data 3.2016.0521 Fetching mime-types 3.1 Installing mime-types 3.1 Fetching mail 2.6.6 Installing mail 2.6.6 Fetching actionmailer 5.2.1 Installing actionmailer 5.2.1 Fetching method_source 0.9.0 Installing method_source 0.9.0 Fetching thor 0.20.0 Installing thor 0.20.0 Fetching railties 5.2.1 Installing railties 5.2.1 Fetching actionpack-xml_parser 2.0.1 Installing actionpack-xml_parser 2.0.1 Fetching activemodel 5.2.1 Installing activemodel 5.2.1 Fetching arel 9.0.0 Installing arel 9.0.0 Fetching activerecord 5.2.1 Installing activerecord 5.2.1 Fetching mimemagic 0.3.2 Installing mimemagic 0.3.2 Fetching marcel 0.3.2 Installing marcel 0.3.2 Errno::ESRCH: No such process - No message available An error occurred while installing marcel (0.3.2), and Bundler cannot continue. Make sure that `gem install marcel -v '0.3.2' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: rails was resolved to 5.2.1, which depends on activestorage was resolved to 5.2.1, which depends on marcel C:\work\redmine>
コンソールから以下を実行すると、システムローカルにmarcelがインストールできました。
C:\work\redmine> gem install marcel -v '0.3.2' --source 'https://rubygems.org/'
しかし、bundleを再実行するとシステムローカルのmarcelを認識せず上述のエラーになってしまいました。
そこで、bundleをアプリケーションローカルではなくシステムローカルに入れる設定で再度実行します。
C:\work\redmine> rmdir /s .bundle C:\work\redmine> bundle install The dependency rmagick (>= 2.14.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. The dependency redcarpet (~> 3.4.0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for java but the dependency is only for ruby, x86-mingw32, x64-mingw32. To add those platforms to the bundle, run `bundle lock --add-platform ruby x86-mingw32 x64-mingw32`. Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/. Resolving dependencies.............. Fetching rake 12.3.1 Installing rake 12.3.1 Fetching concurrent-ruby 1.0.5 (java) Installing concurrent-ruby 1.0.5 (java) Fetching i18n 0.7.0 Installing i18n 0.7.0 Fetching minitest 5.11.3 Installing minitest 5.11.3 Fetching thread_safe 0.3.6 (java) Installing thread_safe 0.3.6 (java) Fetching tzinfo 1.2.5 Installing tzinfo 1.2.5 Fetching activesupport 5.2.1 Installing activesupport 5.2.1 Fetching builder 3.2.3 Installing builder 3.2.3 Fetching erubi 1.7.1 Installing erubi 1.7.1 Fetching nokogiri 1.8.4 (java) Installing nokogiri 1.8.4 (java) Fetching rails-dom-testing 2.0.3 Installing rails-dom-testing 2.0.3 Fetching crass 1.0.4 Installing crass 1.0.4 Fetching loofah 2.2.2 Installing loofah 2.2.2 Fetching rails-html-sanitizer 1.0.4 Installing rails-html-sanitizer 1.0.4 Fetching actionview 5.2.1 Installing actionview 5.2.1 Fetching rack 2.0.5 Installing rack 2.0.5 Fetching rack-test 1.1.0 Installing rack-test 1.1.0 Fetching actionpack 5.2.1 Installing actionpack 5.2.1 Fetching nio4r 2.3.1 (java) Installing nio4r 2.3.1 (java) Fetching websocket-extensions 0.1.3 Installing websocket-extensions 0.1.3 Fetching websocket-driver 0.7.0 (java) Installing websocket-driver 0.7.0 (java) Fetching actioncable 5.2.1 Installing actioncable 5.2.1 Fetching globalid 0.4.1 Installing globalid 0.4.1 Fetching activejob 5.2.1 Installing activejob 5.2.1 Fetching mime-types-data 3.2016.0521 Installing mime-types-data 3.2016.0521 Fetching mime-types 3.1 Installing mime-types 3.1 Fetching mail 2.6.6 Installing mail 2.6.6 Fetching actionmailer 5.2.1 Installing actionmailer 5.2.1 Fetching method_source 0.9.0 Installing method_source 0.9.0 Fetching thor 0.20.0 Installing thor 0.20.0 Fetching railties 5.2.1 Installing railties 5.2.1 Fetching actionpack-xml_parser 2.0.1 Installing actionpack-xml_parser 2.0.1 Fetching activemodel 5.2.1 Installing activemodel 5.2.1 Fetching arel 9.0.0 Installing arel 9.0.0 Fetching activerecord 5.2.1 Installing activerecord 5.2.1 Using mimemagic 0.3.2 Using marcel 0.3.2 Fetching activestorage 5.2.1 Installing activestorage 5.2.1 Fetching public_suffix 3.0.2 Installing public_suffix 3.0.2 Fetching addressable 2.5.2 Installing addressable 2.5.2 Using bundler 1.16.3 Fetching mini_mime 1.0.0 Installing mini_mime 1.0.0 Fetching xpath 3.1.0 Installing xpath 3.1.0 Fetching capybara 2.18.0 Installing capybara 2.18.0 Fetching ffi 1.9.25 (java) Installing ffi 1.9.25 (java) Fetching childprocess 0.9.0 Installing childprocess 0.9.0 Fetching coderay 1.1.2 Installing coderay 1.1.2 Fetching css_parser 1.6.0 Installing css_parser 1.6.0 Fetching csv 1.0.2 Installing csv 1.0.2 Fetching docile 1.1.5 Installing docile 1.1.5 Fetching htmlentities 4.3.4 Installing htmlentities 4.3.4 Using json 2.1.0 (java) Fetching metaclass 0.0.4 Installing metaclass 0.0.4 Fetching mocha 1.7.0 Installing mocha 1.7.0 Fetching net-ldap 0.16.1 Installing net-ldap 0.16.1 Fetching puma 3.12.0 (java) Installing puma 3.12.0 (java) Fetching ruby-openid 2.3.0 Installing ruby-openid 2.3.0 Fetching rack-openid 1.4.2 Installing rack-openid 1.4.2 Fetching sprockets 3.7.2 Installing sprockets 3.7.2 Fetching sprockets-rails 3.2.1 Installing sprockets-rails 3.2.1 Fetching rails 5.2.1 Installing rails 5.2.1 Fetching rbpdf-font 1.19.1 Installing rbpdf-font 1.19.1 Fetching rbpdf 1.19.5 Installing rbpdf 1.19.5 Fetching rdoc 4.3.0 Installing rdoc 4.3.0 Fetching request_store 1.0.5 Installing request_store 1.0.5 Fetching roadie 3.2.2 Installing roadie 3.2.2 Fetching roadie-rails 1.3.0 Installing roadie-rails 1.3.0 Fetching rubyzip 1.2.1 Installing rubyzip 1.2.1 Fetching selenium-webdriver 3.14.0 Installing selenium-webdriver 3.14.0 Fetching simplecov-html 0.10.2 Installing simplecov-html 0.10.2 Fetching simplecov 0.14.1 Installing simplecov 0.14.1 Fetching sqlite3 1.3.13 Installing sqlite3 1.3.13 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/sqlite3-1.3.13/ext/sqlite3 C:/jruby-9.2.0.0/bin/jruby.exe -r ./siteconf20180811-3500-av7z8z.rb extconf.rb checking for sqlite3.h... WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.jruby.util.ShellLauncher to field java.lang.ProcessImpl.handle WARNING: Please consider reporting this to the maintainers of org.jruby.util.ShellLauncher WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release RuntimeError: The compiler failed to generate an executable file. You have to install development tools first. try_do at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:456 try_cpp at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:587 block in find_header at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:1144 block in checking_for at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:942 block in postpone at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:350 open at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:320 block in postpone at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:350 open at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:320 postpone at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:346 checking_for at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:941 find_header at C:/jruby-9.2.0.0/lib/ruby/stdlib/mkmf.rb:1143 <main> at extconf.rb:50 *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/tools/jruby-9.2.0.0/bin/jruby --with-sqlite3-config --without-sqlite3-config --with-pkg-config --without-pkg-config --with-sqlite3-dir --without-sqlite3-dir --with-sqlite3-include --without-sqlite3-include=${sqlite3-dir}/include --with-sqlite3-lib --without-sqlite3-lib=${sqlite3-dir}/lib To see why this extension failed to compile, please check the mkmf.log which can be found here: C:/jruby-9.2.0.0/lib/ruby/gems/shared/extensions/universal-java-10/2.5.0/sqlite3-1.3.13/mkmf.log extconf failed, exit code 1 Gem files will remain installed in C:/jruby-9.2.0.0/lib/ruby/gems/shared/gems/sqlite3-1.3.13 for inspection. Results logged to C:/jruby-9.2.0.0/lib/ruby/gems/shared/extensions/universal-java-10/2.5.0/sqlite3-1.3.13/gem_make.out An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue. Make sure that `gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: sqlite3 C:\work\redmine>
色々調べ回ったところ、見えてきたこと
- native extensionsを持つgemでJRuby対応していないgemは使用できない
→ C言語のコードをインストール時にビルドするため
sqlite3 は、C言語のnative extensionsを持つため、JRubyで使用するには別のgemとしてactiverecord-jdbcsqlite3-adapterを使う対処が可能な模様。
ただ、これだけでは
NoMethodError: undefined method `new_column' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x7865cc83>
とエラーに