Giter Club home page Giter Club logo

chef-rvm_passenger's Introduction

chef-rvm_passenger Build Status

Description

Installs passenger gem via RVM and configures Apache or Nginx.

Usage

Comming soon...

Requirements

Chef

Tested on 0.9.18, 0.10.2 and 0.10.4 but newer and older version should work just fine. File an issue if this isn't the case.

Platform

The following platforms have been tested with this cookbook, meaning that the recipes run on these platforms without error:

  • ubuntu (10.04/10.10/11.04)
  • debian (6.0)
  • suse
  • centos (5/6)
  • redhat (5/6)

Please report any additional platforms so they can be added.

Cookbooks

This cookbook depends on the following external cookbooks:

Installation

Depending on the situation and use case there are several ways to install this cookbook. All the methods listed below assume a tagged version release is the target, but omit the tags to get the head of development. A valid Chef repository structure like the Opscode repo is also assumed.

Using Librarian

Librarian-Chef is a bundler for your Chef cookbooks. Include a reference to the cookbook in a [Cheffile][cheffile] and run librarian-chef install. To install Librarian-Chef:

gem install librarian
cd chef-repo
librarian-chef init

To reference the Git version:

cat >> Cheffile <<END_OF_CHEFFILE
cookbook 'rvm_passenger',
  :git => 'https://github.com/fnichol/chef-rvm_passenger', :ref => 'v0.8.2'
END_OF_CHEFFILE
librarian-chef install

Using knife-github-cookbooks

The knife-github-cookbooks gem is a plugin for knife that supports installing cookbooks directly from a GitHub repository. To install with the plugin:

gem install knife-github-cookbooks
cd chef-repo
knife cookbook github install fnichol/chef-rvm_passenger/v0.8.2

As a Tarball

If the cookbook needs to downloaded temporarily just to be uploaded to a Chef Server or Opscode Hosted Chef, then a tarball installation might fit the bill:

cd chef-repo/cookbooks
curl -Ls https://github.com/fnichol/chef-rvm_passenger/tarball/v0.8.2 | tar xfz - && \
  mv fnichol-chef-rvm_passenger-* rvm_passenger

As a Git Submodule

A dated practice (which is discouraged) is to add cookbooks as Git submodules. This is accomplishes like so:

cd chef-repo
git submodule add git://github.com/fnichol/chef-rvm_passenger.git cookbooks/rvm_passenger
git submodule init && git submodule update

Note: the head of development will be linked here, not a tagged release.

From the Opscode Community Platform

This cookbook is not currently available on the site as it relies on a cookbook (rvm) not available on the community site.

Recipes

default

Installs dependencies and contains helpers for other recipes.

apache2

Installs passenger as an apache2 module. Requires the apache2 recipe.

nginx

Installs passenger as an nginx module. Requires the nginx::source recipe.

Attributes

version

The version of passenger to deploy. This will be in a format used by the gem command. For example:

node['rvm_passenger']['version'] = "3.0.8"

Default is the most current version which is queried dynamically from RubyGems.

rvm_ruby

The RVM ruby (and optional gemset) under which to install the passenger gem. For example:

node['rvm_passenger']['rvm_ruby'] = "ruby-1.8.7-p352@passenger"

Default is the default RVM Ruby in a gemset called "passenger", i.e. "#{node['rvm']['default_rvm']}@passenger".

root_path

Optionally override the full path to the root of the installed passenger gem.

module_path

Optionallly override the full path to the Apache2 module.

Resources and Providers

There are no resources or providers defined.

Development

Pull requests are very welcome! Make sure your patches are well tested. Ideally create a topic branch for every separate change you make.

License and Author

Author:: Fletcher Nichol ([email protected])

Contributors:: https://github.com/fnichol/chef-rvm_passenger/contributors

Copyright:: 2010, 2011, Fletcher Nichol

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

chef-rvm_passenger's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

chef-rvm_passenger's Issues

mod_passenger.so in the wrong location?

After running this recipe the file mod_passenger.so is getting paced here:

/usr/local/rvm/gems/ruby-1.9.3-p194@passenger/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so

but apache is looking for it here:
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194@passenger/gems/passenger-4.0.20/ext/apache2/mod_passenger.so

Any thoughts as to what I might be doing wrong?

Bumping passenger version doesn't recalculate attributes

When I first installed rvm_passenger, it chose passenger 3.0.8. I changed my recipe to explicitly set 3.0.14, but /etc/apache2/mods-enabled/passenger.conf and passenger.load are still pointing at 3.0.8.

I think that's because the not_if guards around root_path and module_path cause them to be set only on the first run. I'd contribute a fix but I don't know the idiomatic chef way to calculate these values only when needed (I presume you don't want to set them every time, as that'd be a useless round trip to the server?)

mysterious file resource breaking chef run for centos 6

hi,

I am getting a mysterious file resource being "inject" in the middle of the recipe which is breaking the rvm_passenger::apache2 recipe.

note i am using v 0.8.2 of the cookbook. the following log is running of this recipe. https://github.com/fnichol/chef-rvm_passenger/blob/v0.8.2/recipes/apache2.rb

you can see that line 51 to 71 all ran as expected. i check the files generated /etc/httpd/mods-available/passenger.conf /etc/httpd/mods-available/passenger.load, they all look good.

then out of no where. there is a file resource getting run file[/etc/httpd/mods-available/passenger.load] which replaced the correct file and thus breaking the chef run.

if i look at there that resource is coming from, it said rvm_passenger::apache2 line 31 which is a ruby line that should not create a resoure
rvm_ruby = node['rvm_passenger']['rvm_ruby']

Please let me know if you see anything i dont.

[2012-12-09T05:11:17+01:00] INFO: Processing template[/etc/httpd/mods-available/passenger.load] action create (rvm_passenger::apache2 line 59)
[2012-12-09T05:11:17+01:00] DEBUG: Current content's checksum:
[2012-12-09T05:11:17+01:00] DEBUG: Rendered content's checksum: 7b428d637720c61e2758bf0b14011dd1023ee33b5e563fa0d69f76adb40f29fb
[2012-12-09T05:11:17+01:00] INFO: template[/etc/httpd/mods-available/passenger.load] updated content
[2012-12-09T05:11:17+01:00] INFO: template[/etc/httpd/mods-available/passenger.load] owner changed to 0
[2012-12-09T05:11:17+01:00] INFO: template[/etc/httpd/mods-available/passenger.load] group changed to 0
[2012-12-09T05:11:17+01:00] INFO: template[/etc/httpd/mods-available/passenger.load] mode changed to 755
[2012-12-09T05:11:17+01:00] INFO: Processing template[/etc/httpd/mods-available/passenger.conf] action create (rvm_passenger::apache2 line 66)
[2012-12-09T05:11:17+01:00] DEBUG: Current content's checksum:
[2012-12-09T05:11:17+01:00] DEBUG: Rendered content's checksum: d9cde74f45dff336920470ab49801b28600cc7b75e46a457742636a7b41a9286
[2012-12-09T05:11:18+01:00] INFO: template[/etc/httpd/mods-available/passenger.conf] updated content
[2012-12-09T05:11:18+01:00] INFO: template[/etc/httpd/mods-available/passenger.conf] owner changed to 0
[2012-12-09T05:11:18+01:00] INFO: template[/etc/httpd/mods-available/passenger.conf] group changed to 0
[2012-12-09T05:11:18+01:00] INFO: template[/etc/httpd/mods-available/passenger.conf] mode changed to 755
[2012-12-09T05:11:18+01:00] INFO: Processing file[/etc/httpd/mods-available/passenger.load] action create (rvm_passenger::apache2 line 31)
[2012-12-09T05:11:18+01:00] INFO: file[/etc/httpd/mods-available/passenger.load] backed up to /var/chef/backup/etc/httpd/mods-available/passenger.load.chef-20121209051118
[2012-12-09T05:11:18+01:00] INFO: file[/etc/httpd/mods-available/passenger.load] contents updated
[2012-12-09T05:11:18+01:00] INFO: file[/etc/httpd/mods-available/passenger.load] mode changed to 644

Cannot install bundler && rake

We try to run this recipe on Ubuntu machine with this:

include_recipe "rvm::system"

and this node configuration:
"rvm": { "install_rubies": true, "rubies": ["1.9.2"] }

However, we are running into this:

rvm_gem[bundler] (/home/internal/chef-dir/cookbooks/rvm/providers/global_gem.rb line 76) had an error: Malformed version number string 1.10.0-pre

Perhaps this may help you imagine what happening:

[Mon, 28 Nov 2011 12:15:09 +0000] INFO: Processing rvm_gem[bundler] action install (/home/internal/chef-dir/cookbooks/rvm/providers/global_gem.rb line 76) [Mon, 28 Nov 2011 12:15:09 +0000] ERROR: rvm_gem[bundler] (/home/internal/chef-dir/cookbooks/rvm/providers/global_gem.rb line 76) has had an error [Mon, 28 Nov 2011 12:15:09 +0000] ERROR: rvm_global_gem[bundler] (rvm::system line 36) has had an error [Mon, 28 Nov 2011 12:15:09 +0000] ERROR: rvm_global_gem[bundler] (/home/internal/chef-dir/cookbooks/rvm/recipes/system.rb:36:in 'from_file') had an error: rvm_global_gem[bundler] (rvm::system line 36) had an error: rvm_gem[bundler] (/home/internal/chef-dir/cookbooks/rvm/providers/global_gem.rb line 76) had an error: Malformed version number string 1.10.0-pre /usr/local/lib/site_ruby/1.8/rubygems/version.rb:187:in 'initialize' /home/internal/chef-dir/cookbooks/rvm/libraries/chef_rvm_set_helpers.rb:6:in 'new' /home/internal/chef-dir/cookbooks/rvm/libraries/chef_rvm_set_helpers.rb:6:in 'rvm_do' /home/internal/chef-dir/cookbooks/rvm/libraries/rvm_rubygems_package.rb:52:in 'gem_paths'

Don't know why 1.10.0-pre is there, since the latest version of bundler should be '1.1.rc'

librarian-chef error "Could not resolve the dependencies."

for some reason librarian-chef is not resolving the dependencies. Cheffile shown below

#!/usr/bin/env ruby
#^syntax detection

site 'http://community.opscode.com/api/v1'

cookbook 'rvm_passenger',
  :git => 'https://github.com/fnichol/chef-rvm_passenger', :ref => 'v0.8.2'

Passenger is installed in one place and apache configs are point to another causing apache to not startup.

I kept the default settings for chef-rvm and chef-rvm_passenger. It seems that passenger's apache file is installed under the global gems here:

vagrant@precise64:~$ locate mod_passenger.so
/usr/local/rvm/gems/ruby-1.9.3-p194@global/gems/passenger-3.0.19/ext/apache2/mod_passenger.so

However, apache config points to @Passenger

vagrant@precise64:~$ cat /etc/apache2/mods-enabled/passenger.conf 
#
# Generated by Chef for precise64.localdomain
# Local modifications will be overwritten.
#
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194@passenger/gems/passenger-3.0.19
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194@passenger/ruby
vagrant@precise64:~$ cat /etc/apache2/mods-enabled/passenger.load 
#
# Generated by Chef for precise64.localdomain
# Local modifications will be overwritten.
#
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194@passenger/gems/passenger-3.0.19/ext/apache2/mod_passenger.so

librarian-chef really hates this cookbook

I can figure out why, its only this cookbook, but I'm a chef noob, I'll put this here in case its also affecting others.

[kevin@millbrook chef-solo-example] librarian-chef install
/Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/action/persist_resolution_mixin.rb:11:in `persist_resolution': undefined method `correct?' for nil:NilClass (NoMethodError)
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/action/resolve.rb:27:in `run'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:168:in `resolve!'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/chef/cli.rb:41:in `install'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/thor-0.17.0/lib/thor/task.rb:27:in `run'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/thor-0.17.0/lib/thor/invocation.rb:120:in `invoke_task'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/thor-0.17.0/lib/thor.rb:344:in `dispatch'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/thor-0.17.0/lib/thor/base.rb:434:in `start'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:26:in `block (2 levels) in bin!'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:31:in `returning_status'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:26:in `block in bin!'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:47:in `with_environment'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/lib/librarian/cli.rb:26:in `bin!'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/gems/librarian-0.0.26/bin/librarian-chef:7:in `'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/bin/librarian-chef:19:in `load'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/bin/librarian-chef:19:in `'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/bin/ruby_noexec_wrapper:14:in `eval'
    from /Users/kevin/.rvm/gems/ruby-1.9.3-p362/bin/ruby_noexec_wrapper:14:in `'

nil value being passed to apache_module

in rvm_passenger:: apache2 (https://github.com/fnichol/chef-rvm_passenger/blob/master/recipes/apache2.rb#L74)

you can see that we are using apache_module definition and passing it node['rvm_passenger']['module_path'] value which is calculated in a ruby block before.

It turns out that node attribute is nill, when the apache_module resource is constructed, which indirectly is throw a error when i try to use this recipe on centos6.

I dont know exactly how each resource is elevated and how one resource might be able to use that node attribute computed by another resource. ( if there is a blog post somewhere let me know).

I did a quick test to show the idea, ideally, in the end of the code run i should see the /tmp/test file contain the content "This is a secret" but it turns out the file contains nothing. it seems that this has to do with the order of things being run.

ruby_block "Calculate secret" do
  block do
    node.set['secret_message'] = "This is a secret"
  end
end

file "/tmp/test" do
  content "#{node['secret_message']}"
  mode 0644
end

Passenger compilation fails

I am seeing an issue where the compilation of passenger with the following error:

================================================================================
Error executing action run on resource 'rvm_shell[build passenger_nginx_module]'

Mixlib::ShellOut::ShellCommandFailed


script[build passenger_nginx_module](/var/chef/cache/cookbooks/rvm/providers/shell.rb line 75) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash" "/tmp/chef-script20130625-19334-3tfxn9" ----
STDOUT: Using /usr/local/rvm/gems/ruby-2.0.0-p195
Welcome to the Phusion Passenger Nginx module installer, v4.0.5.

This installer will guide you through the entire installation process. It
shouldn't take more than 5 minutes in total.

Here's what you can expect from the installation process:

  1. This installer will compile and install Nginx with Passenger support.

  2. You'll learn how to configure Passenger in Nginx.

  3. You'll learn how to deploy a Ruby on Rails application.

    Don't worry if anything goes wrong. This installer will advise you on how to
    solve any problems.

    Press Enter to continue, or Ctrl-C to abort.

    Checking for required software...

  • Checking for GNU C compiler...
    Found: yes
    Location: /usr/bin/gcc

  • Checking for GNU C++ compiler...
    Found: yes
    Location: /usr/bin/g++

  • Checking for A download tool like 'wget' or 'curl'...
    Found: yes
    Location: /usr/bin/wget

    STDERR: /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/ruby.rb:202:in expand_path': non-absolute home (ArgumentError) from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/ruby.rb:202:inblock in rvm_paths'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/ruby.rb:200:in each' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/ruby.rb:200:inrvm_paths'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info.rb:96:in rvm_paths' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/ruby.rb:51:inruby_command'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info.rb:96:in ruby_command' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:266:inruby_command'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb:27:in block in load' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:70:ininstance_eval'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:70:in initialize' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:62:innew'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:62:in find' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:308:inblock in check_all'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:307:in each' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/platform_info/depcheck.rb:307:incheck_all'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/abstract_installer.rb:128:in check_dependencies' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/bin/passenger-install-nginx-module:79:inrun_steps'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.5/lib/phusion_passenger/abstract_installer.rb:66:in run' from /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenge r-4.0.5/bin/passenger-install-nginx-module:511:in<top (required)>'
    from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/passenger-install-nginx-module:19:in load' from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/passenger-install-nginx-module:19:in

    '
    from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in eval' from /usr/local/rvm/gems/ruby-2.0.0-p195/bin/ruby_noexec_wrapper:14:in'
    ---- End output of "bash" "/tmp/chef-script20130625-19334-3tfxn9" ----
    Ran "bash" "/tmp/chef-script20130625-19334-3tfxn9" returned 1

    Cookbook Trace:

    /var/chef/cache/cookbooks/rvm/providers/shell.rb:98:in script_wrapper' /var/chef/cache/cookbooks/rvm/providers/shell.rb:46:inblock in class_from_file'

    Resource Declaration:

    In /var/chef/cache/cookbooks/rvm_passenger/recipes/nginx.rb

    48: rvm_shell "build passenger_nginx_module" do
    49: ruby_string node['rvm_passenger']['rvm_ruby']
    50: code <<-INSTALL
    51: passenger-install-nginx-module
    52: --auto --prefix=#{nginx_install}
    53: --nginx-source-dir=#{archive_cache}/nginx-#{nginx_version}
    54: --extra-configure-flags='#{configure_flags}'
    55: INSTALL
    56: notifies :restart, resources(:service => "nginx")
    57:
    58: not_if <<-CHECK
    59: #{nginx_install}/sbin/nginx -V 2>&1 |
    60: grep "cat /tmp/passenger_root_path/ext/nginx"
    61: CHECK
    62: end
    63:

    Compiled Resource:

    Declared in /var/chef/cache/cookbooks/rvm_passenger/recipes/nginx.rb:48:in `from_file'

    rvm_shell("build passenger_nginx_module") do
    action :run
    retries 0
    retry_delay 2
    cookbook_name "rvm_passenger"
    recipe_name "nginx"
    ruby_string "ruby-2.0.0-p195"
    code " passenger-install-nginx-module --auto --prefix=/opt/nginx-1.4.1 --nginx-source-dir=/var/chef/cache/nginx-1.4.1 --extra-configure-flags='none'\n"
    returns [0]
    not_if " /opt/nginx-1.4.1/sbin/nginx -V 2>&1 | grep "cat /tmp/passenger_root_path/ext/nginx"
    "
    end

    Recipe: nginx::source

  • service[nginx] action reload

    • reload service service[nginx]
  • service[nginx] action restart

    • restart service service[nginx]
  • service[nginx] action restart

    • restart service service[nginx]

    Chef Client failed. 63 resources updated
    Chef bootstrap failed!
    `

Issue compiling nginx

Hello,

I'm trying to use your recipe to setup passenger with nginx under Vagrant. I get this following error when I Vagrant runs chef with this recipe:

invalid argument: --extra-configure-flags=

The issue is that node[:nginx][:configure_flags] is empty, and therefore recipes/nginx.rb, line 30 needs to be changed to this in order to work properly:

configure_flags = node[:nginx][:configure_flags].empty? ? 'none' : node[:nginx][:configure_flags].join(" ")

I also got an error if I did not set this in my main recipe file:

node[:nginx][:install_path] = '/usr'

Are those variables supposed to be set to something, because just doing require_recipe "rvm_passenger:nginx" doesn't set them to anything.

Thanks!

Greg

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.